diff --git a/blogs/Android/Activity.md b/blogs/Android/Activity.md index 519520f..2b0bfac 100644 --- a/blogs/Android/Activity.md +++ b/blogs/Android/Activity.md @@ -82,6 +82,12 @@ Activity 即用户界面。 | singleTask | 栈内复用,只要 Activity 在一个栈中存在,那么多次启动此 Activity 都不会重新创建实例,和 singleTop 一样,系统也会回调其 onNewIntent | | singleInstance | 单例模式,启动的 Activity 会创建一个新的任务栈并压入栈中,由于栈内复用的特性,后续的请求均不会创建新的 Activity,除非这个任务栈被系统销毁了 | +| 情况 | 回调 | +| ------------------------------------------------------------ | ------------------------------------------------------------ | +| 从 A(singleTask)startActivity B(standard),B startActivity A | 第一步:A_onPause、B_onCreate、B_onStart、B_onResume、A_onStop 第二步:B_onPause、A_onNewIntent、A_onRestart、A_onStart、A_onResume、B_onStop、B_onDestory | +| 在 A (singleTask)startActivity A | A_onPause、A_onNewIntent、A_Resume | +| 在 A (singleTop)startActivity A | A_onPause、A_onNewIntent、A_Resume | + 在 singleTask 启动模式中,多次提到某个 Activity 所需的任务栈,什么是 Activity 所需要的任务栈呢?这就要从一个参数说起:taskAffinity,任务相关性。这个参数标识了一个 Activity 所需要的任务栈的名字,默认情况下,所有 Activity 所需的任务栈的名字为应用的包名。当然,我们可以为每个 Activity 都单独指定 taskAffinity 属性,这个属性值必须不能和包名相同,否则相当于没有设置。taskAffinity 属性主要和 singleTask 启动模式和 allowTaskReparenting 属性配对使用,在其他情况下没有意义。 taskAffinity 与 singleTask 配对使用: