主頁 > 移動端開發 > Android——Intent組件

Android——Intent組件

2021-07-21 14:03:16 移動端開發

Intent組件

思維導圖如下:

在這里插入圖片描述

Intent的決議機制

直接Intent:

public class IntentActivity extends Activity {

    public void intentTest() {
        //創建一個Intent物件
        Intent intent = new Intent();
        //指定Intent物件的目標組件是SecondActivity
        intent.setClass(IntentActivity.this, SecondActivity.class);
    }

間接Intent:

在AndroidManifest.xml組態檔中

<!--        Activity配置-->
        <activity android:name=".FirstActivity"
            android:label="My Application">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
<!--             應用程式入口-->
                <category android:name="android.intent.category.LAUNCHER" />
            <!-- 該活動優先級最高-->
        </intent-filter>
        </activity>

Intent呼叫常用組件

在之前的IntentActivity類中寫的:

 /**
     * Intent呼叫方法
     */
    //啟動瀏覽器
    public void intentTest1() {
        Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.google.com"));
        startActivity(intent);
    }
    //啟動瀏覽器并前往http://www.google.com

    //啟動撥號程式
    public void intentTest2() {
        Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("tel:138"));
        startActivity(intent);
    }
    //啟動撥號程式并輸入號碼”138“

    //通話
    public void intentTest3() {
        Uri uri=Uri.parse("tel:138");
        Intent intent = new Intent(Intent.ACTION_CALL, uri);
        startActivity(intent);
    }
    //撥打號碼138.需要為程式申請權限<uses-permission android:name=" android.permission.CALL_PHONE" />

    //發送短信
    @SuppressLint("IntentReset")
    public void intentTest4() {
        String url = null;
        Uri smsUri=Uri.parse(url);
        Intent intent = new Intent(Intent.ACTION_VIEW, smsUri);
        intent.setType("vnd.android-dir/mms-sms");
        startActivity(intent);
    }
    //啟動短信程式

    //啟動通訊錄
    public void intentTest5() {
        Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("content://contacts/people/1"));
        startActivity(intent);
    }
    //啟動通訊錄的某一條目

    //啟動地圖程式
    public void intentTest6() {
        String url = null;
        Uri mapUri=Uri.parse(url);
        Intent intent = new Intent(Intent.ACTION_VIEW, mapUri);
        startActivity(intent);
    }
    //啟動地圖程式

    //啟動郵件程式
    public void intentTest7() {
        Uri uri=Uri.parse("mailto:xxx@example.com");
        Intent intent = new Intent(Intent.ACTION_SENDTO, uri);
        intent.putExtra(Intent.EXTRA_SUBJECT,"Hello world");
        intent.putExtra(Intent.EXTRA_TEXT,"Ganbarimasu");
        startActivity(intent);
    }
    //啟動郵件程式并將收件人設為xxx.@example.com,郵件主題設為Hello world,內容設為Ganbarimasu

    //啟動郵件程式并添加多個收件人
    public void intentTest8() {
        Intent intent = new Intent(Intent.ACTION_SEND);
        String[] tos={"me@example.com"};
        String[] ccs={"you@example.com"};
        intent.putExtra(Intent.EXTRA_EMAIL,tos);
        intent.putExtra(Intent.EXTRA_CC,ccs);
        intent.putExtra(Intent.EXTRA_TEXT,"The email body text");
        intent.putExtra(Intent.EXTRA_SUBJECT,"The email subject text");
        intent.setType("message/rfc822");
        startActivity(Intent.createChooser(intent,"Choose Email Client"));
    }
    //啟動郵件程式并設定為發送給多個收件人

    //啟動地圖程式
    public void intentTest9() {
        Intent intent = new Intent(Intent.ACTION_SEND);
        intent.putExtra(Intent.EXTRA_SUBJECT,"The email subject text");
        intent.putExtra(Intent.EXTRA_STREAM,"file:///sdcard/mysong.mp3");
        Intent sendIntent = new Intent();
        sendIntent.setType("audio/mp3");
        startActivity(Intent.createChooser(intent,"Choose Email Client"));
    }
    //啟動郵件程式并添加附件

    //播放MP3檔案
    public void intentTest10() {
        Intent intent = new Intent(Intent.ACTION_VIEW);
        Uri uri=Uri.parse("file:///sdcard/song.mp3");
        intent.setDataAndType(uri,"audio/mp3");
        startActivity(intent);
    }
    //啟動音樂程式并播放MP3歌曲

    //安裝應用
    public void setupAPK(String apkname) {
        String fileName= Environment.getExternalStorageState()+"/"+apkname;
        Intent intent = new Intent(Intent.ACTION_VIEW);
        intent.setDataAndType(Uri.fromFile(new File(fileName)),
                "application/vnd.android.package-archive");
        Activity mService = new Activity();
        mService.startActivity(intent);
    }
    //呼叫setupAPK方法,傳入應用名稱即可安裝指定的應用

    //卸載程式
    public void intentTest12() {
        String strPackageName = null;
        Uri uri=Uri.fromParts("package",strPackageName,null);
        Intent intent = new Intent(Intent.ACTION_DELETE,uri);
        startActivity(intent);
    }
    //卸載包名為strPackageName的程式

    //啟動設定
    public void intentTest13() {
        Intent intent = new Intent("android.settings.SETTINGS");
        startActivity(intent);
    }
    //進入設定程式

    //從圖庫(Gallery)中選擇并獲取一張圖片
    public void intentTest14() {
        Intent intent = new Intent();
        intent.setType("image/*");
        intent.setAction(Intent.ACTION_GET_CONTENT);
        startActivityForResult(intent,11);
    }
    //啟動圖庫,從中選擇并獲取一張圖片,回傳源程式

Intent在多Activity中的使用

由一個Activity啟動另一個Activity

	/**
     * 由一個Activity啟動另一個Activity
     * 最常見最一般的頁面跳轉代碼
     */
    public void IntentTest15(){
        Intent intent=new Intent(IntentActivity.this,SecondActivity.class);
        startActivity(intent);
    }
    //或者
    public void IntentTest16(){
        Intent intent=new Intent();
        intent.setClass(IntentActivity.this,SecondActivity.class);
        startActivity(intent);
    }
    //或者
    public void IntentTest17(){
        Intent intent=new Intent();
        intent.setClass(getApplicationContext(),SecondActivity.class);
        startActivity(intent);
    }

Activity間的資料交換

public class FirstActivity extends ListActivity {
    protected void onListItemClick(ListView l, View v, int position, long id) {
        super.onListItemClick(l, v, position, id);
        //獲得選中項的HashMap物件
        HashMap map = (HashMap) l.getItemAtPosition(position);
        String Type = (String) map.get("Type");
        Intent i = new Intent(this, Title.class);

        //實體化一個Buddle物件
        //用putString(標記,資料)來將資料匯入到Buddle物件中
        Bundle mBundle = new Bundle();
        mBundle.putString("type", Type);
        //將Buddle物件匯入到Intent物件中
        i.putExtras(mBundle);
        //Intent啟動另一個Activity
        startActivity(i);

        //從Intent中讀出需要的資料,Buddle物件可以從activity.getIntent().getExtras()中回傳
        //啟動當前Activity的Intent物件是由getIntent()來找到的
        Bundle bundle = getIntent().getExtras();
        if (bundle != null) {
            //通過Buddle物件的getString()方法,就可以讀出所要的資料
            Type = bundle.getString("type");
        }
        if (Type != null) {
            //從資料庫依據所選型別讀出文章的Title,保存在cur中,myDBadapter是資料庫名字
            String cur = myDBadapter.getTitle(new String[]{Type});
        }
    }

    /**
     * 其他方法簡介
     */
    public void intentTest18() {
        Intent intent = new Intent();
        intent.setClass(FirstActivity.this, SecondActivity.class);
        intent.putExtra("Name", "ppy2790");
        startActivity(intent);
    }
}

帶結果回傳的Activity

public class SecondActivity extends Activity {
    /**
     *帶結果回傳的Activity
     */
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data){
        Intent intent=new Intent();
        switch(requestCode){
            case RESULT_OK:
                /*取得來自SecondActivity頁面的資料,并顯示到畫面*/
                Bundle bundle=data.getExtras();
                /*獲取Bundle中的資料,注意型別和key*/
                String name=bundle.getString("Name");
                boolean ismale=bundle.getBoolean("ismale");
        }
        //在SecondActivity頁面上加一個回傳按鈕,并在事件寫如下代碼:
        /*給上一個Activity回傳結果*/
        SecondActivity.this.setResult(RESULT_OK,intent);
        /*結束本Activity*/
        SecondActivity.this.finish();
    }
}
實體!

一個簡單的短信應用——

用到的一些額外的知識點

Cursor類跟平時用的資料庫中的游標類似,它提供了從資料庫回傳的結果的隨機讀寫操作
像實體中那樣,通過managedQuery方法查詢資料庫并回傳結果,然后利用Cursor對它進行操作
Cursor類的幾個方法:
//回傳給定列名的索引(注意:從0開始的),或者當列名不存在時拋出IlegalArgumentException例外
    public abstract int getColumnIndexOrThrow(String columnName);

    //移動到第一行.如果Cursor為空,則回傳FALSE
    public abstract boolean moveToFirst();

    //將游標移動到一個指定的位置,它的范圍為-1<=position<=count
    //如果position位置不可達,回傳FALSE
    public abstract boolean moveToPosition(int position);

    // 根據指定的URI路徑資訊回傳包含特定資料的Cursor物件,應用這個方法可以使Activity接管返回資料物件的生命周期
    // 引數-
    // URI:Content Provider需要回傳的資源索引
    // Projection:用于標識有哪些columns需要包含在回傳資料中
    // Selection:作為查詢符合條件的過濾引數,類似于SQL陳述句中Where之后的條件判斷
    // SelectionArgs:作為查詢符合條件的過濾引數
    // SortOrder:用于對回傳資訊進行排序
    // SimpleCursorAdapter:允許系結一個游標的列到ListView上,并使用自定義的layout顯示每個專案
    //  創建需要傳入當前的背景關系/一個layout資源,一個游標和兩個陣列
    //  [一個包含使用的列的名字,另一個(相同大小)陣列包含View中的資源ID,用于顯示相應列的資料值]
    public abstract void managedQuery();

用戶可以先編輯短信,然后再去通訊錄中選擇相應的人并發送給他;
用戶可以在短信內容中插入通訊錄中聯系人的號碼
功能實作:

  • 創建一個新的Activity選擇(ACTION_PICK)通訊錄中的資料,它會顯示通訊錄中的所有聯系人并讓用戶選擇,然后關閉并回傳一個聯系人的URI給短信程式
  • 首先需要添加用于顯示通訊錄的布局檔案,用一個ListView來顯示整個通訊錄,其中用TextView顯示每一記錄,

xml檔案——contact.xml和listitemlayout.xml

最后需要在清單檔案AndroidManifest.xml中注冊通訊錄活動和讀取Contact資料庫的權限:

組態檔奇怪的報錯解決不了
點擊Build->clean Project;
清除所有的類別庫即可,

Executing tasks: [:app:assembleDebug] in project D:\Download\Android\AndroidStudioProjects\MyApplication

> Task :app:preBuild UP-TO-DATE
> Task :app:preDebugBuild UP-TO-DATE
> Task :app:compileDebugAidl NO-SOURCE
> Task :app:compileDebugRenderscript NO-SOURCE
> Task :app:generateDebugBuildConfig UP-TO-DATE
> Task :app:javaPreCompileDebug UP-TO-DATE
> Task :app:checkDebugAarMetadata UP-TO-DATE
> Task :app:generateDebugResValues UP-TO-DATE
> Task :app:generateDebugResources UP-TO-DATE
> Task :app:mergeDebugResources UP-TO-DATE
> Task :app:createDebugCompatibleScreenManifests UP-TO-DATE
> Task :app:extractDeepLinksDebug UP-TO-DATE

> Task :app:processDebugMainManifest
[com.android.support:animated-vector-drawable:28.0.0] C:\Users\gzz\.gradle\caches\transforms-2\files-2.1\2ea246c20a91481cc0f9ad545d596a80\animated-vector-drawable-28.0.0\AndroidManifest.xml Warning:
	Package name 'android.support.graphics.drawable' used in: com.android.support:animated-vector-drawable:28.0.0, com.android.support:support-vector-drawable:28.0.0.

> Task :app:processDebugManifest
> Task :app:mergeDebugNativeDebugMetadata NO-SOURCE
> Task :app:mergeDebugShaders UP-TO-DATE
> Task :app:compileDebugShaders NO-SOURCE
> Task :app:generateDebugAssets UP-TO-DATE
> Task :app:mergeDebugAssets UP-TO-DATE
> Task :app:compressDebugAssets UP-TO-DATE
> Task :app:processDebugJavaRes NO-SOURCE
> Task :app:mergeDebugJavaResource UP-TO-DATE
> Task :app:checkDebugDuplicateClasses UP-TO-DATE
> Task :app:desugarDebugFileDependencies UP-TO-DATE
> Task :app:mergeExtDexDebug UP-TO-DATE
> Task :app:mergeDebugJniLibFolders UP-TO-DATE
> Task :app:mergeDebugNativeLibs UP-TO-DATE
> Task :app:stripDebugDebugSymbols NO-SOURCE
> Task :app:validateSigningDebug UP-TO-DATE
> Task :app:writeDebugAppMetadata UP-TO-DATE
> Task :app:writeDebugSigningConfigVersions UP-TO-DATE
> Task :app:processDebugManifestForPackage
> Task :app:processDebugResources

> Task :app:compileDebugJavaWithJavac
?: ?Щ�����?�?�?򸲸����?�?�� API��
?: �й���?��?, ��?�� -Xlint:deprecation ���±��?

> Task :app:compileDebugSources
> Task :app:dexBuilderDebug
> Task :app:mergeDexDebug
> Task :app:packageDebug
> Task :app:assembleDebug

BUILD SUCCESSFUL in 7s
27 actionable tasks: 8 executed, 19 up-to-date

Build Analyzer results available

專案投放打開即閃退——
重新clear project,一般運行之前都要先clean;
報錯:

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.myapplication, PID: 6652
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.myapplication/com.example.myapplication.TextMessage}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3449)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601)
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:223)
        at android.app.ActivityThread.main(ActivityThread.java:7656)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference
        at com.example.myapplication.TextMessage.onCreate(TextMessage.java:25)
        at android.app.Activity.performCreate(Activity.java:8000)
        at android.app.Activity.performCreate(Activity.java:7984)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1309)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3422)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601) 
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85) 
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) 
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066) 
        at android.os.Handler.dispatchMessage(Handler.java:106) 
        at android.os.Looper.loop(Looper.java:223) 
        at android.app.ActivityThread.main(ActivityThread.java:7656) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947) 

轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/289326.html

標籤:其他

上一篇:Activity切換效果

下一篇:[iOS開發]ARC

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【從零開始擼一個App】Dagger2

    Dagger2是一個IOC框架,一般用于Android平臺,第一次接觸的朋友,一定會被搞得暈頭轉向。它延續了Java平臺Spring框架代碼碎片化,注解滿天飛的傳統。嘗試將各處代碼片段串聯起來,理清思緒,真不是件容易的事。更不用說還有各版本細微的差別。 與Spring不同的是,Spring是通過反射 ......

    uj5u.com 2020-09-10 06:57:59 more
  • Flutter Weekly Issue 66

    新聞 Flutter 季度調研結果分享 教程 Flutter+FaaS一體化任務編排的思考與設計 詳解Dart中如何通過注解生成代碼 GitHub 用對了嗎?Flutter 團隊分享如何管理大型開源專案 插件 flutter-bubble-tab-indicator A Flutter librar ......

    uj5u.com 2020-09-10 06:58:52 more
  • Proguard 常用規則

    介紹 Proguard 入口,如何查看輸出,如何使用 keep 設定入口以及使用實體,如何配置壓縮,混淆,校驗等規則。

    ......

    uj5u.com 2020-09-10 06:59:00 more
  • Android 開發技術周報 Issue#292

    新聞 Android即將獲得類AirDrop功能:可向附近設備快速分享檔案 谷歌為安卓檔案管理應用引入可安全隱藏資料的Safe Folder功能 Android TV新主界面將顯示電影、電視節目和應用推薦內容 泄露的Android檔案暗示了傳說中的谷歌Pixel 5a與折疊屏新機 谷歌發布Andro ......

    uj5u.com 2020-09-10 07:00:37 more
  • AutoFitTextureView Error inflating class

    報錯: Binary XML file line #0: Binary XML file line #0: Error inflating class xxx.AutoFitTextureView 解決: <com.example.testy2.AutoFitTextureView android: ......

    uj5u.com 2020-09-10 07:00:41 more
  • 根據Uri,Cursor沒有獲取到對應的屬性

    Android: 背景:呼叫攝像頭,拍攝視頻,指定保存的地址,但是回傳的Cursor檔案,只有名稱和大小的屬性,沒有其他諸如時長,連ID屬性都沒有 使用 cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DURATIO ......

    uj5u.com 2020-09-10 07:00:44 more
  • Android連載29-持久化技術

    一、持久化技術 我們平時所使用的APP產生的資料,在記憶體中都是瞬時的,會隨著斷電、關機等丟失資料,因此android系統采用了持久化技術,用于存盤這些“瞬時”資料 持久化技術包括:檔案存盤、SharedPreference存盤以及資料庫存盤,還有更復雜的SD卡記憶體儲。 二、檔案存盤 最基本存盤方式, ......

    uj5u.com 2020-09-10 07:00:47 more
  • Android Camera2Video整合到自己專案里

    背景: Android專案里呼叫攝像頭拍攝視頻,原本使用的 MediaStore.ACTION_VIDEO_CAPTURE, 后來因專案需要,改成了camera2 1.Camera2Video 官方demo有點問題,下載后,不能直接整合到專案 問題1.多次拍攝視頻崩潰 問題2.雙擊record按鈕, ......

    uj5u.com 2020-09-10 07:00:50 more
  • Android 開發技術周報 Issue#293

    新聞 谷歌為Android TV開發者提供多種新功能 Android 11將自動填表功能整合到鍵盤輸入建議中 谷歌宣布Android Auto即將支持更多的導航和數字停車應用 谷歌Pixel 5只有XL版本 搭載驍龍765G且將比Pixel 4更便宜 [圖]Wear OS將迎來重磅更新:應用啟動時間 ......

    uj5u.com 2020-09-10 07:01:38 more
  • 海豚星空掃碼投屏 Android 接收端 SDK 集成 六步驟

    掃碼投屏,開放網路,獨占設備,不需要額外下載軟體,微信掃碼,發現設備。支持標準DLNA協議,支持倍速播放。視頻,音頻,圖片投屏。好點意思。還支持自定義基于 DLNA 擴展的操作動作。好像要收費,沒體驗。 這里簡單記錄一下集成程序。 一 跟目錄的build.gradle添加私有mevan倉庫 mave ......

    uj5u.com 2020-09-10 07:01:43 more
最新发布
  • 歡迎頁輪播影片

    如圖,引導開始,球從上落下,同時淡入文字,然后文字開始輪播,最后一頁時停止,點擊進入首頁。 在來看看效果圖。 重力球先不講,主要歡迎輪播簡單實作 首先新建一個類 TextTranslationXGuideView,用于影片展示 文本是類似的,最后會有個圖片箭頭影片,布局很簡單,就是一個 TextVi ......

    uj5u.com 2023-04-20 08:40:31 more
  • 【FAQ】關于華為推送服務因營銷訊息頻次管控導致服務通訊類訊息

    一. 問題描述 使用華為推送服務下發IM訊息時,下發訊息請求成功且code碼為80000000,但是手機總是收不到訊息; 在華為推送自助分析(Beta)平臺查看發現,訊息發送觸發了頻控。 二. 問題原因及背景 2023年1月05日起,華為推送服務對咨詢營銷類訊息做了單個設備每日推送數量上限管理,具體 ......

    uj5u.com 2023-04-20 08:40:11 more
  • 歡迎頁輪播影片

    如圖,引導開始,球從上落下,同時淡入文字,然后文字開始輪播,最后一頁時停止,點擊進入首頁。 在來看看效果圖。 重力球先不講,主要歡迎輪播簡單實作 首先新建一個類 TextTranslationXGuideView,用于影片展示 文本是類似的,最后會有個圖片箭頭影片,布局很簡單,就是一個 TextVi ......

    uj5u.com 2023-04-20 08:39:36 more
  • 【FAQ】關于華為推送服務因營銷訊息頻次管控導致服務通訊類訊息

    一. 問題描述 使用華為推送服務下發IM訊息時,下發訊息請求成功且code碼為80000000,但是手機總是收不到訊息; 在華為推送自助分析(Beta)平臺查看發現,訊息發送觸發了頻控。 二. 問題原因及背景 2023年1月05日起,華為推送服務對咨詢營銷類訊息做了單個設備每日推送數量上限管理,具體 ......

    uj5u.com 2023-04-20 08:39:13 more
  • iOS從UI記憶體地址到讀取成員變數(oc/swift)

    開發除錯時,我們發現bug時常首先是從UI顯示發現例外,下一步才會去定位UI相關連的資料的。XCode有給我們提供一系列debug工具,但是很多人可能還沒有形成一套穩定的除錯流程,因此本文嘗試解決這個問題,順便提出一個暴論:UI顯示例外問題只需要兩個步驟就能完成定位作業的80%: 定位例外 UI 組 ......

    uj5u.com 2023-04-19 09:16:23 more
  • FIDE重磅更新!性能飛躍!體驗有禮!

    FIDE 開發者工具重構升級啦!實作500%性能提升,誠邀體驗! 一直以來不少開發者朋友在社區反饋,在使用 FIDE 工具的程序中,時常會遇到諸如加載不及時、代碼預覽/渲染性能不如意的情況,十分影響開發體驗。 作為技術團隊,我們深知一件趁手的開發工具對開發者的重要性,因此,在2023年開年,FinC ......

    uj5u.com 2023-04-19 09:16:15 more
  • 游戲內嵌社區服務開放,助力開發者提升玩家互動與留存

    華為 HMS Core 游戲內嵌社區服務提供快速訪問華為游戲中心論壇能力,支持玩家直接在游戲內瀏覽帖子和交流互動,助力開發者擴展內容生產和觸達的場景。 一、為什么要游戲內嵌社區? 二、游戲內嵌社區的典型使用場景 1、游戲內打開論壇 您可以在游戲內繪制論壇入口,為玩家提供沉浸式發帖、瀏覽、點贊、回帖、 ......

    uj5u.com 2023-04-19 09:15:46 more
  • iOS從UI記憶體地址到讀取成員變數(oc/swift)

    開發除錯時,我們發現bug時常首先是從UI顯示發現例外,下一步才會去定位UI相關連的資料的。XCode有給我們提供一系列debug工具,但是很多人可能還沒有形成一套穩定的除錯流程,因此本文嘗試解決這個問題,順便提出一個暴論:UI顯示例外問題只需要兩個步驟就能完成定位作業的80%: 定位例外 UI 組 ......

    uj5u.com 2023-04-19 09:14:53 more
  • FIDE重磅更新!性能飛躍!體驗有禮!

    FIDE 開發者工具重構升級啦!實作500%性能提升,誠邀體驗! 一直以來不少開發者朋友在社區反饋,在使用 FIDE 工具的程序中,時常會遇到諸如加載不及時、代碼預覽/渲染性能不如意的情況,十分影響開發體驗。 作為技術團隊,我們深知一件趁手的開發工具對開發者的重要性,因此,在2023年開年,FinC ......

    uj5u.com 2023-04-19 09:14:08 more
  • 游戲內嵌社區服務開放,助力開發者提升玩家互動與留存

    華為 HMS Core 游戲內嵌社區服務提供快速訪問華為游戲中心論壇能力,支持玩家直接在游戲內瀏覽帖子和交流互動,助力開發者擴展內容生產和觸達的場景。 一、為什么要游戲內嵌社區? 二、游戲內嵌社區的典型使用場景 1、游戲內打開論壇 您可以在游戲內繪制論壇入口,為玩家提供沉浸式發帖、瀏覽、點贊、回帖、 ......

    uj5u.com 2023-04-19 09:08:34 more