最近在项目测试的时候,发现自己对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了;

更多相关文章

  1. Android(安卓)创建与解析XML(一)—— 概述
  2. Android的Handler Looper Message机制应用实例与详解(二)
  3. Android(安卓)创建定时任务
  4. Android(安卓)Gesture 手势识别使用实例
  5. 双击运行Android模拟器、创建SDcard、AVD、安装APK文件、上传文
  6. android线程间通信之handler
  7. Android(安卓)Telephony启动过程源码分析
  8. 【Android(安卓)多语言切换简单实例分享】
  9. Android(安卓)之 zygote 与进程创建

随机推荐

  1. android Toast显示消息的几种方法
  2. Lock-free atomic operations in Android
  3. android 大文件分割上传(分块上传)
  4. Android 各层中日志打印功能的应用
  5. Android(安卓)HAL实现的三种方式(3) - 基
  6. Android(安卓)MVVM框架 DataBinding
  7. Android瀑布流照片墙、滑动切换图片
  8. android环境变量的配置
  9. Android面试计划指南
  10. android客户端通过Get方式提交参数给服务