问:Activity A启动B,过程中的生命周期


activity A启动activity B的生命周期变化?B 不透明。

A onPause()—B onCreat()—B onStart()— B onResume() — A onStop();(B是半透明的,则A不会 onStop())

再关闭activity B的生命周期,B 不透明。

B onPause()—A onRestart()—A onStart()—A onResume()—B onStop()—B onDestroy()


问:Activty启动模式,什么时候会用到singleInstance?


  1. Standard 标准
  2. SingleTop 栈顶复用
  3. SingleTask 栈内复用
  4. SingleInstance 单实例模式,一种加强的SingleTask模式

启动模式的区别


  1. standard

    • 重复创建多个实例
    • 谁启动了这种模式的 Activity,新 Activity 就会运行在启动者所在的栈中
    • ApplicationContext 启动 standard 的 Activity,会报错

  2. singleTop

    • 如果位于栈顶则不会重复创建,不调用 ​onCreate​​onStart​,直接调用 ​onNewIntent()​ 方法

  3. singleTask

    • 只要 Activity 在一个栈中有实例,多次启动此 Activity 都不会创建实例,也是直接调用 ​onNewIntent()​
    • 启动 singleTask 的 Activity 时,系统会先找有没有想要的任务栈,没有就新建个任务栈;有就看栈里有没有实例
    • 栈内有实例,就会把该 Activity 调到栈顶,同时 clearTop(之前在它前面的都被清除)
    • 一般用于 MainActivity,因为回到首页后需要清除之前的页面

  4. singleInstance

    • 就是霸道一点的 singleTask
    • 启动后新建一个任务栈,这个栈里只会有它一个
    • 拨号、闹钟


应用场景


  1. standard:普通展示页面
  2. singleTop :适用于展示通知详情的Activity,在点开某个通知后,再点开一个通知就复用
  3. singleTask:应用主页,MainActivity
  4. singleInstance:拨号、闹钟



(本专题会在工作日每天更新,有错误的地方,望指正。)