android intent singletask,Android Activity 的四種啟動模式 lunchMode 和 Intent.setFlags();singleTask的兩種啟動方式。…

android intent singletask,Android Activity 的四種啟動模式 lunchMode 和 Intent.setFlags();singleTask的兩種啟動方式。…AndroidActivity的四種啟動模式lunchMode和Intent.setFlags();一.AndroidActivity四種啟動模式lunchMode在Manifest配置文件中的屬性如下:(1)android:launchMode=”standard”(2)android:launchMode=”singleTop”(3)android:launchMode=…

Android Activity 的四種啟動模式 lunchMode 和 Intent.setFlags();

一.Android Activity 四種啟動模式 lunchMode 在Manifest 配置文件中的屬性如下:

(1) android:launchMode=”standard”

(2)android:launchMode=”singleTop”

(3)android:launchMode=”singleTask”

(4)android:launchMode=”singleInstance”

二.說明:

Android 中Activity 生命周期 跟Task 的關系,就是進棧出棧。

很多時候我們在Manifest的Activiy 配置信息中沒有看到lunchMode 屬性,其實沒有配置這個屬性就是系統默認屬性 android:launchMode=”standard”。同一個工程AppA在這種模式下有AfirstActivity 啟動 AsecondActivity,啟動代碼是:

Log 打印如下:

aHR0cDovL3d3dy4yY3RvLmNvbS5jMi5vcGVuLjM2MGNkbi5jbi91cGxvYWRmaWxlL0NvbGxmaWxlcy8yMDE0MTAzMS8yMDE0MTAzMTA5MDE0NTEwMi5qcGc=

兩個TaskId 都是98.說明兩個 activity 是在同一個 任務棧 Task 中。

接下來我們讓這兩個Activity 不在同一個Task 中。有兩種方法實現:

(1)不修改啟動代碼,只修改 Mnaifest 中 給AsecondActivity 配置多添加 兩行代碼如下:

(2)修改啟動代碼:

多添加了一行

在修改 Mnaifest 中AsecondActivity 配置多添加一行

看Log打印:

aHR0cDovL3d3dy4yY3RvLmNvbS5jMy5vcGVuLjM2MGNkbi5jbi91cGxvYWRmaWxlL0NvbGxmaWxlcy8yMDE0MTAzMS8yMDE0MTAzMTA5MDE0NTEwMy5qcGc=

AfirstActivity taskId = 8 而 AsecondActivity TaskId = 9.所以兩個 activity 不是在同一個任務棧 Task 中。雖然兩個activity 是在同一個工程下面。

分析:

由此看出,代碼里設置

和配置文件中設置

的效果是一樣的。 但是請注意,這里要兩個條件滿足才 會讓兩個activity 不在同一個Task 中。必須 加上 屬性

有些人會奇怪,一般Manifest 配置文件中 很少看見 這個屬性,這個屬性的意思 是 “task 空間”=== “任務空間” 是的,當你沒有設置的時候也是系統默認給設置 成為 當前應用的包名。我們這里設置 的和包名不一樣。所以兩個activity 的任務空間是不一樣的,所以兩個 activity 不在同一個 Task 中。 當然了,只是設置了

沒有設置

或者

兩個 activity 也是在同一個任務空間的。親測。

總結:當設置了

時,系統會查找 對應的

任務空間是否 有啟動過 這個activity ,如果沒有啟動,則在這個taskAffinity 任務空間啟動,如果有啟動過,則 將 這個activity 推送到棧頂, 那么在這個activity 之上的activity 都被推送出棧了,不在任務Task 中,也就是 Ondestroy 了。

三.當 配置文件中設置了 android:launchMode=”singleInstance”。不管 activity 怎么啟動,都是在一個新的Task 任務中啟動activity。

看Log 打印:

aHR0cDovL3d3dy4yY3RvLmNvbS5jNC5vcGVuLjM2MGNkbi5jbi91cGxvYWRmaWxlL0NvbGxmaWxlcy8yMDE0MTAzMS8yMDE0MTAzMTA5MDE0NTEwNC5qcGc=

兩個TaskId 不一樣。並且 被啟動的activity 唯一存在 新的任務隊列中,也就是這個task 隊列中只能有 一個activity。

今天的文章android intent singletask,Android Activity 的四種啟動模式 lunchMode 和 Intent.setFlags();singleTask的兩種啟動方式。…分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/30632.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注