本文对比 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 分布于多个应用中。
举个例子。
情景一
手机上装了两个应用: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 打开。
作者:zhaizu 发表于2017/3/8 15:46:02 原文链接
阅读:45 评论:0 查看评论