Activity四中启动模式

Android使用栈来管理Activity(Task 和 BackStack)。

manifest中的四种launch-mode

  1. standard(Activity默认的启动模式)
    • 每次启动都会重新创建一个实例,不管这个Activity在栈中是否已经存在;
    • 谁启动了这个Activity,那么Activity就运行在启动它的那个Activity所在的栈中;
    • 用Application去启动Activity时会报错,提示非Activity的Context没有所谓的任务栈。解决 办法是为待启动Activity制定FLAG_ACTIVITY_NEW_TASH标志位,这样就会为它创建 一个新的任务栈。(Android7.0之后也可以直接用application启动Activity)
  2. singleTop
    • 如果新Activity位于任务栈的栈顶,那么此Activity不会被重新创建,同时调用 onNewIntent 方法,此时的生命周期:onPause() -> onNewIntent() -> onResume() ;
    • 如果新Activity已经存在但不是位于栈顶,那么新Activity仍然会被创建。
  3. singleTask
    • 这是一种单实例模式
    • 只要Activity在栈中存在,那么多次启动这个Activity都不会重新创建实例,同时也会调用 onNewIntent 方法,此时的生命周期有两种,当待启动Activity在栈顶时:onPause() -> onNewIntent() -> onResume() ; 不在栈顶时:onNewIntent() -> onStart() -> onResume() 。
    • 同时会导致在Activity之上的栈内Activity出栈。
  4. singleIntance
    • 具有singleTask模式的所有特性,同时具有此模式的Activity只能单独的位于一个任务栈中
      图中可以SingleInstanceActivity属于另一个Task
      可以看出启动模式为singleInstance的SingleInstanceActivity属于一个独立的Task。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值