Activity四种启动模式详解1. standard 2. singleTop 3. singleTask 4. singleInstance

1. standard
2. singleTop
3. singleTask
4. singleInstance 

1. 使用
     1. 在manifest中activiy标签中设置launchMode
     2. 代码中使用intent启动activity时指定flag,此方法与launchMode并不是一一对应的,并且优先级高于launchMode
2. 详细说明
     1. standard
     默认与启动的activity位于用一个task栈,忽略指定的栈名。除非启动该activity的activity为singleInstance模式。每次都会在栈顶创建一个activity实例
     2. singleTop
     默认与启动的activity位于用一个task栈,忽略指定的栈名。除非启动该activity的activity为singleInstance模式。若栈顶恰好为打开的activity实例,不创建新的实例,复用该栈顶实例,复用时会调用该activity的onNewIntent-Restart-Onstart-OnResume(不调用OnCreate)
     3. singleTask
     默认与启动的activity位于用一个task栈,忽略指定的栈名。除非启动该activity的activity为singleInstance模式。若栈内存在与打开的activity相同的实例,不创建新的实例,复用该栈顶实例,并清除相同task栈内该实例上部所有实例,具有clear top效果。复用时会调用该activity的onNewIntent-Restart-Onstart-OnResume(不调用OnCreate)。注:启动singleTask的activity时,若该singleTask的activiy指定了taskAffinity也就是Task栈名,系统会判断该栈名与启动的activiyt所在的栈名是否相同,如不同则新建该task栈用来存放该activiy
     4. singleInstance
     singleTask的升级版。必须单独存在于一个task栈内,使用singleInstance的activityA打开其他非singleInstance的activityB时,由于两个不能处于同一个task栈内,会使用activityB指定的task栈,未指定的话新建task栈存储
3.  android:taskAffinity用来指定默认栈名
   android:launchMode = "standard" 启动方法
<
activity android:name = ".launchmode.ActivityA"
android:taskAffinity = "com.task.a1"
android:launchMode = "standard" />
4. activity的launchMode不是默认时,需要注意重写activity的onNewIntent方法,否则复用activity时该activity无法重新获得intent启动数据:例如
    @Override
    protected  void  onNewIntent(Intent intent) {
        Log.i(
"test","onNewIntent..." );
        setIntent(intent);
        processExtraData();
       
super .onNewIntent(intent);
    }
    private  void  processExtraData(){
        String value 
= getIntent().getStringExtra("test" );
        Log.i(
"test","value===>"+ value);
    }
参考网址:
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值