IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> allowTaskReparenting学习 -> 正文阅读

[移动开发]allowTaskReparenting学习

官方解释

allowTaskReparenting
当下一次将启动 Activity 的任务转至前台时,Activity 是否能从该任务转移至与其有相似性的任务 —“true”表示可以转移,“false”表示仍须留在启动它的任务处。
如果未设置该属性,则对 Activity 应用由 元素的相应 allowTaskReparenting 属性所设置的值。默认值为“false”。
正常情况下,Activity 启动时会与启动它的任务关联,并在其整个生命周期中一直留在该任务处。当不再显示现有任务时,您可以使用该属性强制 Activity 将其父项更改为与其有相似性的任务。该属性通常用于将应用的 Activity 转移至与该应用关联的主任务。

例如,如果电子邮件消息包含网页链接,则点击该链接会调出可显示该网页的 Activity。该 Activity 由浏览器应用定义,但作为电子邮件任务的一部分启动。如果将该 Activity 的父项更改为浏览器任务,则它会在浏览器下一次转至前台时显示,在电子邮件任务再次转至前台时消失。

理解:每个Activty的启动,都会位于一个任务栈中。当将activity的allowTaskReparenting设置为true时,表示当这个Activity被其他应用程序启动后,位于其他应用程序的任务栈中时,启动该应用程序,会将该Activity从其他的任务栈移到本程序的任务栈。

测试:
编写两个应用程序,developArtLearn和taskReparentingTest,在developArtLearn中用隐式意图启动taskReparentingTest的Test这个Activity,该Activity的android:allowTaskReparenting属性设置为true。
taskReparentingTest的主Activity是MainActivity。

//taskReparentingTest中用隐式意图启动taskReparentingTest的Test
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        startActivity(new Intent("com.android.taskreparentingtest.Test"));
    }
}
	<!--Test在清单文件中注册-->
	<activity android:name=".Test"
            android:allowTaskReparenting="true">
            <intent-filter>
                <action android:name="com.android.taskreparentingtest.Test"/>
                <category android:name="android.intent.category.DEFAULT"/>
            </intent-filter>
        </activity>

启动developArtLearn后,用隐式意图启动taskReparentingTest的Test
在命令行中使用命令 adb shell dumpsys activity 显示模拟器的任务栈情况。
在这里插入图片描述
可以看到有两个Activity Test和MainActivity 他们都处于同一个任务栈中,com.android.developartlearn任务栈中。当前显示的是Test。

当从桌面点击图标,taskReparentingTest进入应用时,再使用命令adb shell dumpsys activity查看模拟器的任务栈情况。
在这里插入图片描述
可以看到,有两个Activity,他们分处两个不同的任务栈中。可以看到之前的Test(7a63ed9)被移到了新的任务栈com.android.taskreparentingtest任务栈中。

如果去除Test的android:allowTaskReparenting属性,由于android:allowTaskReparenting属性的默认值为false,所以它不会将Test从其他应用程序的任务栈中移到自己应用程序的任务栈中。

启动developArtLearn后,再使用隐式意图启动Test
在这里插入图片描述
可以看到有两个ActivityTest和MainActivity,他们都处于一个任务栈中com.android.developartlearn。

当从桌面点击图标,taskReparentingTest进入应用时,再使用命令adb shell dumpsys activity查看模拟器的任务栈情况。
在这里插入图片描述
可以看到有三个Activity它们分别处于两个任务栈中,taskReparentingTest的MainActivity,当前正在显示,我们点击应用图标进入该应用的主Activity。它处于com.android.taskreparentingtest任务栈中。
developArtLearn的MainActivity和taskReparentingTest的Test都处于com.android.developartlearn任务栈中。

当将android:allowTaskReparenting置为false时,由developArtLearn用隐式意图启动taskReparentingTest的Test后,再从桌面点击图标进入taskReparentingTest后,它没有将在com.android.developartlearn的Test移到自己的任务栈中,任然位于之前的任务栈中。而是启动了该应用的主Activity。可以看到它的任务栈com.android.taskreparentingtest中只有MainActivity。

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-07-04 19:58:19  更:2021-07-04 19:58:35 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/5 7:49:39-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码