理解android中Activity和Task的关系

Android的每一个Activity都运行在堆栈中,一个Task栈能够有多个Activity,同一个Activity也能够在不一样的Task栈中。java

栈顶的Activity是用户当前正在进行交互的Activity。用户不断返回的时候,栈顶的Activity会不断弹出直到用户回到桌面或者其余启动这个Activity的组件,那么这个Task就会销毁了。android

Task是分前台和后台的。通常当用户启动一个新的Task或者按Home键回到桌面时,Task就会被转入后台。若是用户长时间离开某个Task,这个Task只保留root Activity,其余的都会被销毁。code

Activity的LaunchMode属性能够指定Activity和Task之间的关系。it

android:launchMode="standard"
            android:launchMode="singleTop"
            android:launchMode="singleTask"
            android:launchMode="singleInstance"

系统默认是standard的,即同一个Activity能够被实例化屡次。

singleTop是指若是Task栈如今的顺序是A,B,C,D。那么若是如今传来一个intent是启动D的,那么D是会调用onNewIntent来接受传来的intent,而不会从新启动D。因此Task栈的顺序仍是A,B,C,D。class

singleTask是指Activity只能实例化一次而且为它建立一个新的Task,若是Activity已存在其余Task中就执行Activity的onNewIntent方法。当前Activity做为Task的root Activity,从root Activity启动的Activity会push进同一个Task中。后台

singleInstance是指Activity只能实例化一次而且独占一个Task。其余与singleTask同样。方法

除了能够在androidmanifest文件中定义Activity和Task的关系以外,在启动Activity时传入的Intent中也能够设置标识符来修改Activity的启动模式文件

FLAG_ACTIVITY_NEW_TASK
FLAG_ACTIVITY_SINGLE_TOP
FLAG_ACTIVITY_CLEAR_TOP

FLAG_ACTIVITY_NEW_TASK和singleTask对应时间

FLAG_ACTIVITY_SINGLE_TOP和singleTop对应vi

FLAG_ACTIVITY_CLEAR_TOP的话是指若是启动的Activity已存在,则将该Activity之上的Activity所有销毁掉。即栈A,B,C,D如今有传来intent启动Activity B,则C和D都将被finish掉,而后启动Activity B。

相关文章
相关标签/搜索