由打开微信分享引发的activity任务栈属性探究
问题由来
无聊时用网易云音乐打开点击分享按钮时选择微信分享后打开了微信分享的activity界面,点击任务键后可以看到微信分享的activity与网易云在不同的任务栈中,点击网易云的task窗口回到网易云音乐中后再次点击任务键后发现微信分享的activity不见了,比较好奇的我,决定探究一下。
观察任务栈
这种涉及到activity任务栈的问题,需要明确栈的情况是怎么样的,直接输入adb命令查看:
adb shell dumpsys activity activities
将shell窗口拉到接近最后的位置
每个TaskRecord都是不同的任务栈,相同任务栈的activity会处于同一个TaskRecord中,且包含在ActivityRecord中。
操作一下在网易云音乐进行分享,弹出微信后,点击多任务键回到网易云音乐,反复操作两三次后,发现每次微信分享的activity都处于新的任务栈中,且该分享的activity与微信app所在的任务栈不在一起(这个通过在手机中点击微信应用图标后进入未进入到分享页面可以验证)。
实现
1. 首先准备两个测试的app
2. 配置被调用的app的Manifest:
<activity
android:name=".activity.RemoteActivity"
android:excludeFromRecents="true"
android:exported="true"
android:noHistory="true"
android:taskAffinity="com.moc.test"/>
android:excludeFromRecents="true" //当进入其它task后当前task从手机的recentTask窗口中移除
android:noHistory="true" //离开该activity后销毁,即每次都会新建task存放新的activity实例
3. 调用远程应用配置的Activity
Intent intent = new Intent();
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
ComponentName componentName = new ComponentName("com.tplink.androidtest", "com.tplink.androidtest.activity.RemoteActivity");
intent.setComponent(componentName);
startActivity(intent);