Activity 顯式和隱式跳轉利弊對比

本文對比 Activity 的兩種跳轉方式的利弊。

顯式跳轉

實現

Intent intent = new Intent(mContext, AnotherActivity.class);  
startActivity(intent);  

優點

  • 性能高;
  • 可讀性強;
  • 目標 Activity 唯一;

缺點

  • 產生強耦合
  • 目標 Activity 寫死,不夠靈活

隱式跳轉

實現

AndroidManifest.xml

<activity android:name=".AnotherActivity";   
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />

                <category android:name="android.intent.category.BROWSABLE" />
                <category android:name="android.intent.category.DEFAULT" />

                <data
                    android:host="another"
                    android:scheme="loveya" /> 
 </activity>  

Activity.java

Uri.Builder builder = Uri.parse("loveya://another").buildUpon();
                builder.appendQueryParameter("strA", "a");
                Intent i = new Intent(Intent.ACTION_VIEW, builder.build());
                i.putExtra("intB", 1);

                startActivity(i);

優點

  • 避免了強耦合;
  • 可由後端以字符串形式吐出,靈活可配,比如目標 Activity 出現嚴重故障,通過後端吐空來規避故障;

缺點

  • 同一個 scheme 對應多個 Activity 時,跳轉時目標 Activity 不唯一,即使多個 Activity 分佈於多個應用中。
  • 由於跳轉不顯示引用目標 Activity,當目標 Activity 被誤刪時 IDE 無法靜態檢查跳轉異常,從而留下隱患,可能導致線上 crash,需要在跳轉處加 try-catch 保證健壯性;

舉個例子。

情景一
手機上裝了兩個應用:A 和 B;
SecondActivity.java 位於應用 A 中,scheme 是 “love://ya”;
ThirdActivity.java 位於應用 B 中,scheme 是 “love://ya”;

在 A 或 B 或 adb start 命令行使用隱式方式跳轉,手機會彈出對話框讓用戶選擇使用 A 還是 B 打開。

情景二
手機上裝了兩個應用:A 和 B;
A 和 B 都引了一個 aar,該 aar 中有一個 AnotherActivity,在 A 或 B 中使用隱式方式跳轉到 AnotherActivity,手機會彈出對話框讓用戶選擇使用 A 還是 B 打開。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章