Android 四种加载方式 standard singleTop singleTask singleInstance

最近在项目测试的时候,发现自己对android的启动模式几乎不懂,所以专门花了些时间测试下。我讲得尽量简单些。(复杂的我也将不出来,呵呵)

1.standard : 当你不去设置launchMode属性时,默认为standard ,standard 表示只要启动了这个activity就会创建一个新的实例,位于栈顶,而原来的实例则被压栈。

验证方式:

android:launchMode="standard"

 class buttonAclickListener implements View.OnClickListener{
  @Override
  public void onClick(View v) {
   Intent i = new Intent(ActivytA.this, ActivytA.class);

   startActivity(i);
  }
 }

总是启动当前activity,点击5次,这时候存在6个该activity的实例,那么你再按返回键,需要返回6次才能退出程序,明白了吧


2.singleTop :当launchMode设置为singleTop时,其实和standard差不多,唯一差别就是每次创建新的实例,会去检测当前栈顶是不是要创建的实例,如果是则直接用栈顶的,不创建,反之创建。

验证方式:

android:launchMode="singleTop"

 class buttonAclickListener implements View.OnClickListener{
  @Override
  public void onClick(View v) {
   Intent i = new Intent(ActivytA.this, ActivytA.class);

   startActivity(i);
  }
 }

总是启动当前activity,点击5次,这时候只存在1个activity实例,按返回键,就直接退出程序了。简单吧。

如果在栈顶则依次调用onNewIntent(Intent intent),onRestart() ,onStart() ,onResume()


3.singleTask :当launchMode设置为singleTask 时,表示当前task只存在该activity的一个实例,不会有第二个,一山不容二虎,呵呵。

当重新启动该activity时,依次调用onNewIntent(Intent intent),onRestart() ,onStart() ,onResume() 

如果使用这种模式,在传递数据时,注意在onNewIntent方法里处理,这里不做解释,你懂的。

注意:singleTask模式的Activity不管是位于栈顶还是栈底,再次运行这个Activity时,都会将它上面的activity干掉,下面的不会理会。

所以,当一个应用里面有多个activity设置singleTask,程序只认第一个属性为singleTask的activity,其它的无视。

举例:程序x里面有a,b,c三个activity都设置了singleTask,启动a,跳到b,再跳到c,此时三个实例都存在,a在栈底,此时从才跳到a,那么b,c就都被destroy了。


4.singleInstance :当launchMode设置为singleInstance 时,表示重新建立一个task,并且这个task只存在该activity的一个实例,如果你需要调用第三方activity时,比如google地图,当你停留在google地图上,点击home键出去,你再进来事实上这里还是当前activity,一个应用。比如导游应用启动地图Activity,实际上是在导游应用task栈之上singleInstance模式创建的(如果还没有的话,如果有就是直接显示它)一个新栈,当这个栈里面的唯一Activity,地图Activity回退的时候,只是把这个栈移开了,这样就看到导游应用刚才的Activity了;

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值