Android中Activity创建模式singleTask的最佳使用方式

Android的创建模式有四种singleTask,standard(默认),singleTop,singleInstance,

在四种创建模式中最长用的应该是默认方式 standard,其次是singleTask,下来是singleTop,最后是singleInstance

这几种创建模式中,往往影响的是Activity的BackStack(回退栈)。

1.标准(standard)模式基本上是后进先出,每次都会重新创建Activity,这点不多说。

2.singleInstance是最少使用的,因为这个Activity的生命周期和应用程序的生命周期是相同的, 销毁也是个问题。在MVC中,Activity类似于Controller,但我们知道基于Servlet的单例效果并不好,
比如出现信息泄露,同步等问题,才出现了后来的SpringMVC,Struts2等使用多例模式。

3.SingleTop, 如果在任务的栈顶正好存在该Activity的实例, 就重用该实例,否者就会创建新的实例并放入栈顶 (即使栈中已经存在该Activity实例,只要不在栈顶,都会创建实例)。

4.singleTask 如果在栈中已经有该Activity的实例,就重用该实例(会调用实例的onNewIntent())。重用时, 会让该实例回到栈顶,因此在它上面的实例将会被移除栈。如果栈中不存在该实例,将会创建新的实例放入栈中。

概念说道这里,再来说说SingleTask的使用方式

singleTask保证了在栈中Activity的唯一性,如果被SingleTask标记的Activity处于栈底,站定的Activity发送Intent返回到栈底时,栈中间的Activity会被清除,这个时候被标记过SingleTask的生命周期会响应的做出调整。

onNewIntent->onStart->onResume->…..

这次不会调用OnCreate,但是这里有一个问题,OnNewIntent是被调用了,但是Intent中所保存的数据却仍然还是旧数据,因此需要进一步重写

PS:来一个例子,方便大家理解吧

创建一个一个MainActivity,在Manifest中设置

 <activity
            android:launchMode="singleTask"
            android:name="com.simple.launchmode.MainActivity"
            android:screenOrientation="portrait" />

MainActivity.java

/***
     * 将activity 的创建模式设置为singletask, 
     * 使用这个方法可以再其他activity想这个activity发送Intent时,这个Intent能够及时更新
     */
    @Override
    protected void onNewIntent(Intent intent)
    {
          super.onNewIntent(intent);
          setIntent(intent); //这一句必须的,否则Intent无法获得最新的数据
    }

基本就是这样了,下面我们来说说SingleTask的优化搭配

 <activity
      android:launchMode="singleTask"
      android:taskAffinity="com.hongkong.stationcontrol.MainActivity"
      android:name="com.hongkong.stationcontrol.MainActivity"
      android:screenOrientation="portrait" />
android:taskAffinity="com.hongkong.stationcontrol.MainActivity"

android:taskAffinity相当于一个标签,这个标签是任务名称,SingleTask从字面意思理解是单任务,这里是任务的名称,前面所说的而保持Activity的唯一性只是这个单任务的一个子集,默认情况下任务都是同一个(按照packageName)来设置的,这样他的优势并没有完全发挥,因此要使用

android:taskAffinity="com.hongkong.stationcontrol.MainActivity"

重新创建一个任务,这样实现了Activity的唯一性的同时,也实现了单任务。

try do it!

原文:

你可能感兴趣的:(整理)