首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > 移动开发 >

ActivityGroup对起步新Activity处理的四种情况

2013-02-20 
ActivityGroup对启动新Activity处理的四种情况Intent?intent??new?Intent(MyActivityGroup.this,?SubActi

ActivityGroup对启动新Activity处理的四种情况
Intent?intent?=?new?Intent(MyActivityGroup.this,?SubActivity.class);??

  • getLocalActivityManager().startActivity("SubActivityKey",?intent);??

    ?

    ??????? 其中, getLocalActivityManager()是ActivityGroup的方法,所以直接实例化一个ActivityGroup来调用这个方法也是可以的。通过该方法得到管理子Activity的委托LocalActivityManager实例,该实例使用startActivity(String id, Intent intent)方法启动子Activity。

    ?

    ??????? 既然ActivityGroup管理着多个子Activity,如果原来没有子Activity运行,那不用说就是启动一个新的Activity来运行了;但如果当前已经有一个子Activity正在运行,此时再调用startActivity(String id, Intent intent),会发生些什么情况呢?情况分4种:

    1. 1.如果参数中的intent匹配到一个新的(即在Map中不存在的)Activity时,那就启动一个新的Activity,并把id作为key、新的Activity作为value放到Map中;新的Activity一般是指与Map中已经存在的Activity派生类不同的其它Activity的派生类。如果匹配到子Activity与当前运行的相同,则再分情况;
    2. 2.如果当前运行的子Activity不是以multiple模式启动或者设置了FLAG_ACTIVITY_SINGLE_TOP属性时,当前运行的子Activity继续运行(而不是结束掉),并调用Activity#onNewIntent(Intent)方法,这个会体现在onResume()中(即之后调用onResume);生命周期为:onCreate -> onStart -> onResume -> onPause -> onNewIntent -> onResume -> onPause -> onNewIntent -> ......
    3. 3.如果新请求中的Intent与当前运行的子Activity的Intent内容一样(extras除外),且新请求中的Intent没有设置FLAG_ACTIVITY_CLEAR_TOP属性,则当前运行的子activity会继续运行(跟当前一样),也不会调用onNewIntent、onResume;
    4. 4.其它情况(如设置了FLAG_ACTIVITY_CLEAR_TOP属性),则先把当前的子Activity结束掉,然后启动新的Activity(这新旧两个子Activity类名同一个)。

    ??????? hellogv的例子中,子Activity只有一种SubActivity,如果Intent设置了FLAG_ACTIVITY_CLEAR_TOP属性,则每次切换时都会先把当前的SubActivity结束掉,然后再启动一个新的SubActivity;如果没有设置FLAG_ACTIVITY_CLEAR_TOP属性,则当前的SubActivity继续运行,此时如果Activity是非multiple模式或Intent设置了FLAG_ACTIVITY_SINGLE_TOP属性则可以看到生命周期的变化,否则就好像什么都没有发生。

  • 热点排行