`
810364804
  • 浏览: 785350 次
文章分类
社区版块
存档分类
最新评论

Android关于Activity和task以及近期任务栏启动的相关思考

 
阅读更多

其实关于Android的Activity和task的关系,网上文章很多,我只是针对我自己发现的问题,稍作总结

我的理解是,对于一个app而言,它的Activity是保存在task中的,一个app可以有多个task,一个task可以有多个Activity,

当我们按下home键的时候,当前运行app的task进入到后台,当我们重新进入应用,就会直接返回之前task的位置。

以上为正常逻辑


下面为我自己的推测,还望指正


我的理解是,Activity的顺序为:首先按task排序,然后按task中的Activity排序。由此推断当app由后台到前台时,

其实是一组的task,而不是我们理解的一个task。


Activity与task的关系为:一个task中有多个Activity,当Activity销毁时候,Activity从task中移除,当task中没有Activity的时候,

该task销毁。


Activity会维护app运行时产生的task,当我们进入程序时,系统会检测是否存在运行过的task,如果存在,直接将其提到前提,如果

不存在,则会重新创建。


基于以上的几个观点,我们试着去理解一下从进入app以及从近期任务栏进入程序的执行逻辑。


1 点击图标进入app

task为空-->创建task-->创建mainActivity-->进入后台-->点击应用图标-->task不为空-->直接将task提到前台,展示Activity


2 由近期任务栏进入

有近期任务栏进入程序,会从ActivityManagerService中获得近期运行的task的信息,然后通过Intent将task提到前台。

注意,从ActivityManagerService中获得近期运行的task记录的是应用启动的那个task的信息,如果在该task之上存在

task,则展示上面的task,如果该task之上不存在,则直接创建新的task。


注意理解:启动的那个task的含义

一般启动的那个task指的是存储在最底端、最下面的那个task。


2013.7.18日更新

在网上看见一个关于Activity运行模式的文章,其实我和他的理解基本一样,只是人家表述的更清晰

链接:http://www.cnblogs.com/xiaoQLu/archive/2011/09/29/2195742.html

在此,我只强调下singleInstance 模式

该模式下,会创建一个新的task为Activity,如果该Actvity的实例存在,以后的跳转都不会再创建新的实例,不论该Activity是否处于显示的状态上。

另外一个问题就和这个近期任务栏相关了。

近期任务栏记录的是该app最后一次开辟新的task的信息,就像flag的newTask标记与singleInstance 模式,都会创建新的task,系统记录该task,在近期任务栏启动中启动应用,会从该task中记录的信息启动具体的Activity,而不再是程序的入口Activity

ps:flag的newTask标记标记不是一定都会起作用的,我的理解是,如果task不存在,创建,存在该标记失效!!!



分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics