android activity栈及状态

一个task就是一个activity栈,同一个task中能够保存不一样app的activityhtml

1. launchMode.net

launchMode在多个Activity跳转的过程当中扮演着重要的角色,它能够决定是否生成新的Activity实例,是否重用已存在的Activity实例,是否和其余Activity实例公用一个task里。code

Activity的建立和回收是由系统来管理的,因此不须要人工去建立Activity实例或者销毁某个Activity实例。htm

默认的launchMode 不论task中是否存在某个Activity的实例都会建立一个新的实例,而且将该实例移到栈的顶部,此时task中可能存在多个Activity实例(但处于不一样的状态),当栈顶的实例finish后下面的实例会进入栈顶,并从新进入到运行状态。blog

http://blog.csdn.net/liuhe688/article/details/6754323生命周期

2. activity状态及生命周期内存

http://blog.csdn.net/hpoi/article/details/4629065ci

3. intent flagget

http://www.cnblogs.com/xingfuzzhd/archive/2012/12/26/2834078.htmlit

http://www.xuebuyuan.com/1551789.html

结论:更新节目将启动一个新的activity,若是按照默认,每次更新都将建立一个Activity实例,这将占用大量的内存,因此咱们须要的行为是:建立一个Activity实例,每次更新的时候不建立新的实例,只是经过intent通知该实例处理并更新节目。

此时,使用singleTop launchMode或者使用FLAG_ACTIVITY_CLEAR_TOP    + FLAG_ACTIVITY_NEW_TASK 均可以实现这个效果,当调用startacitity时,若是此时栈顶已经有该Activity徳实例,则该实例会触发onNewIntent(而不是onCreate),此时系统没有建立新徳Activity实例,只是将intent传递给栈顶的实例而已。

4. 利用intent 

FLAG_ACTIVITY_CLEAR_TOP

flag重启app

http://blog.csdn.net/jack_sivenchen/article/details/51985502

5。 监控activity是否位于栈顶

http://blog.csdn.net/jdsjlzx/article/details/13510011

相关文章
相关标签/搜索