Activity 显式和隐式跳转利弊对比

    xiaoxiao2021-03-25  137

    显式跳转 实现优点缺点 隐式跳转 实现优点缺点

    本文对比 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 打开。

    转载请注明原文地址: https://ju.6miu.com/read-3477.html

    最新回复(0)