活动的启动模式

活动的启动模式一共有4种,分别是standard,singleTop,singleTask,singleInstance。在AndroidMainfest.xml中,可以给标签指定android:launchMode的属性来选择启动模式。

  1. standard模式
    简单明了的说,standard模式,在每次启动之前都会创建该活动的一个实例。直接上代码:
button1.setOnClickListener(new View.OnClickListener(){    public void onClick(View v){        Intent intent=new Intent(FirstActivity.this,FirstActivity.class);        startActivity(intent);    }});

可以看到这段代码的意思是在FirstActivity的基础上再次启动FirstActivity,每次点击我的项目中的button1就会创建一个实例,因此你创建几次,需要点击几次back键才能退出。原理图如下所示:Android中,活动的几种启动模式_第1张图片

  1. singleTop模式

在活动启动的时候,如果发现返回栈的栈顶已经是该活动,则认为可以直接使用它,不会再创建新的活动实例。具体例子如下:
我们先在AndroidMainfest.xml中修改一下使用该模式

<activity android:name=".FirstActivity"    android:launchMode="singleTop"    android:label="This a FirstActivity">    <intent-filter>        <action android:name="android.intent.action.MAIN" />        <category android:name="android.intent.category.LAUNCHER" />    </intent-filter></activity>

在修改一下FirstActivity中的代码`

button1.setOnClickListener(new View.OnClickListener(){    public void onClick(View v){        Intent intent=new Intent(FirstActivity.this,SecondActivity.class);        startActivity(intent);    }});

点击按钮1之后去活动二。

SecondActivity:

button2.setOnClickListener(new View.OnClickListener() {    @Override    public void onClick(View view) {        Intent intent=new Intent(SecondActivity.this, FirstActivity.class);        startActivity(intent);    }});

可以发现程序运行时,创建了两个不同的活动一的实例。这是由于在活动二中再次启动活动一的时候,栈顶活动已经变为了活动二,因此会创建一个新的活动一实例。现在按下back键,会返回到活动二,再次按下返回又会返回活动一再次按就会结束。
原理图为:
Android中,活动的几种启动模式_第2张图片
3. singleTask

上面的例子看出虽然singleTop能一定程度解决创建重复实例的过程但是还是不是很完善。利用singleTask能够很好的解决这个问题。把当前的活动模式指定为singleTask,每次启动这个活动的时候,系统首先会去栈里面检查是否存在这个活动的实例。如果发现存在则这个活动以上的活动就全部出栈,如果没有就创建新的实例。

<activity android:name=".FirstActivity"    android:launchMode="singleTask"    android:label="This a FirstActivity">    <intent-filter>        <action android:name="android.intent.action.MAIN" />        <category android:name="android.intent.category.LAUNCHER" />    </intent-filter></activity>

在活动一重写onStart方法

@Overrideprotected void onStart() {    super.onStart();    Log.d("FirstActivity","onRestart");}

在活动二重写onDestroy方法

@Overrideprotected void onDestroy() {    super.onDestroy();    Log.d("SecondActivity","onDestroy");}

原理图为:Android中,活动的几种启动模式_第3张图片

  1. singleInstance
    singleIntance模式实际上就是创建一个新的栈将一个特定的活动放进去,从而应用来使用这个活动的时候,都会共用这个一个特殊的栈。
<activity android:name=".SecondActivity"    android:launchMode="singleInstance">    <intent-filter>        <action android:name="com.example.activitytest.ACTION_START" />        <category android:name="android.intent.category.DEFAULT" />        <category android:name="com.example.activitytest.MY_CATEGORY" />    </intent-filter></activity>

Android中,活动的几种启动模式_第4张图片

更多相关文章

  1. Android Activity启动模式设置为SingleTask需要注意的地方
  2. Android Freeform模式
  3. vivo 手机开发者模式运行安装apk失败
  4. 简单三步通过Builder模式来实现Android顶部导航TopBar
  5. 替换Android自带apk (adb模式和串口模式)
  6. Android Handler ExecutorService(线程池) 缓存模式
  7. Android 第三方库使用实例——编写.so库文件
  8. Android 拦截返回键事件的实例详解

随机推荐

  1. Android中使用Build获取当前系统SDK版本
  2. Android读写XML(下)
  3. [转]Android媒体的一些使用总结
  4. android:layout_gravity和android:gravit
  5. Android(安卓)监控程序安装和删除的实现
  6. android 创建系统变量
  7. BlueStacks 进入 beta 1 阶段,给 Windows
  8. Android(安卓)Framework源码下载及编译
  9. 申请图吧地图Android(安卓)API密钥详解
  10. Android软Watchdog源码分析