由打开微信分享引发的activity任务栈属性探究

本文通过使用网易云音乐分享至微信的过程,探讨了不同应用间Activity任务栈的管理方式。利用ADB命令观察任务栈的变化,揭示了Activity如何在不同任务栈中隔离,并通过代码示例展示了如何配置特定的Activity属性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

由打开微信分享引发的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);
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值