场景:本文主要是对“一个应用的activity跳转至另一个应用的activity情况下,这两个activity在哪个栈内”这个问题进行讨论与分析,欢迎大佬进行指正。
编写测试代码:
A应用的某个activity添加跳转事件(显式跳转):传入包名、类全名
Intent intent = new Intent();
intent.setClassName("com.hongshi.singleapp.equiphealth", "com.hongshi.singleapp.blankActivity");
startActivity(intent);
B应用里加了一个测试activity,并在Manifest中,将exported开启:
<activity android:name=".blankActivity"
android:exported="true"/>
操作:运行A,B项目,然后将两个APP都杀死,在打开A项目。点击跳转至B项目后,在终端输入adb命令:?adb shell dumpsys activity ,查看任务栈,并找到正在运行的activity那一栏,如下图:
?由此可见,这种情况下,B应用的activity,是与A应用在同一个任务栈中,并且任务栈属于A应用。得到结论后,我又好奇另一种情况:“如果B activity是Main Activity的情况呢?”。下面继续进行尝试,为了避免混淆,我在B应用新建了另一个activity--SplashActivity,修改Manifest中的代码,如下:
<activity android:name=".blankActivity"
android:exported="true"/>
<activity
android:name=".SplashActivity"
android:configChanges="orientation|keyboardHidden"
android:screenOrientation="portrait"
android:exported="true"
android:theme="@style/splash_theme">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
同事修改A应用跳转逻辑代码,修改跳转目标activity类名为:com.hongshi.singleapp.SplashActivity
Intent intent = new Intent();
intent.setClassName("com.hongshi.singleapp.equiphealth", "com.hongshi.singleapp.SplashActivity");
startActivity(intent);
重复上述操作,结果如下图:
?最终结论:在A的activity跳转至B的activity情况下,B应用的activity,是与A应用在同一个任务栈中,并且任务栈属于A应用。
|