LotusLoveNature

日常工作,生活小记

Android task singleInstance android:taskAffinity

      开始一直不能详尽了解Activity之间相互启动与返回重新调起到底发生了什么,只知道A调用B,B可以返回A。然后A中有四种Task模式,A启动B通过Intent的时候,可以加入Flag。但是了解均限制在理论,没有深入理解。先以通俗方式说一下Activity的launcheMode:

      singleTask 在栈中只有一个实例,位于栈底

      singleInstance 只有一个实例,但位于另一个task中,也就是与启动它的activity在不同的task。位于另一个task是它最特殊的地方。

      singleTop 当调用栈中最上面的一个是同一个实例时,就不创建新的实例。

      当A启动B时一般情况都是位于同一个task,比如单纯使用了singleTask,singleTop,它们没有new task的功能;另外一个manifest里面定义的application下面的所有Activity默认都是位于同一个task,不管你是否设置位于其他process,remote什么,都不管用。那么你可能会问,如果我在start 的时候用new task的Flag呢,理论告诉我们就算用了这个标签,它会先检查两个Activity的taskAffinity是否一样,如果一样,也是不能启动new task的。这里提到了taskAffinity它表示Activity附属于什么task,一般用包名配置。同一个application下面的所有activity的taskAffinity默认是application包名。这就解释了他们为什么总在一个task。

       那如果我们真的需要new task呢,怎么办呢。那就是设置taskAffinity,设置你要new task的Activity taskAffinity属性不要是application的包名。可以使任意其他的。或者launchermode设置为singleInstance.

评论
©LotusLoveNature | Powered by LOFTER