如何进行网站制作,一个人做网站 优帮云,两个wordpress数据同步,seo零基础培训前几天看到hellogv的例子——“ActivityGroup实现Tab分页标签 ”#xff0c;由于之前没有用过AcitivityGroup#xff0c;例子代码不算太少#xff0c;但看上去出现了ActivityGroup的地方就是#xff1a;平常的主入口(Activity派生类)变成了继承ActivityGroup。所以看了一头… 前几天看到hellogv的例子——“ActivityGroup实现Tab分页标签 ”由于之前没有用过AcitivityGroup例子代码不算太少但看上去出现了ActivityGroup的地方就是平常的主入口(Activity派生类)变成了继承ActivityGroup。所以看了一头雾水…… 其实ActivityGroup是Activity的派生类(子类)所以具备了Activity的特性(包括平常所用的onCreate到onDestroy的整个生命周期)所以就是当Activity用也没有问题。不过它的主要扩展功能是能够同时管理多个Activity。所以如果在某个界面(Activity)上需要来回切换多个不同或相同的Activity时它是很好用的。 曹文斌的“ActivityGroup是如何对嵌入的Activitys进行管理的 ”文章已经详细解释ActivityGroup与其管理的子Activity的关系概括来说是ActivityGroup委托LocalActivityManager对多个子Activity进行管理(子Activity都放到一个Map中同时为了提高效率也放到一个数组ArrayList中)其中每个子Activity都对应唯一的标识这个标识用作Map的key值。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种
如果参数中的intent匹配到一个新的(即在Map中不存在的)Activity时那就启动一个新的Activity并把id作为key、新的Activity作为value放到Map中新的Activity一般是指与Map中已经存在的Activity派生类不同的其它Activity的派生类。如果匹配到子Activity与当前运行的相同则再分情况如果当前运行的子Activity不是以multiple模式启动或者设置了FLAG_ACTIVITY_SINGLE_TOP属性时当前运行的子Activity继续运行(而不是结束掉)并调用Activity#onNewIntent(Intent)方法这个会体现在onResume()中(即之后调用onResume)生命周期为onCreate - onStart - onResume - onPause - onNewIntent - onResume - onPause - onNewIntent - ...... 如果新请求中的Intent与当前运行的子Activity的Intent内容一样(extras除外)且新请求中的Intent没有设置FLAG_ACTIVITY_CLEAR_TOP属性则当前运行的子activity会继续运行(跟当前一样)也不会调用onNewIntent、onResume其它情况(如设置了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属性则可以看到生命周期的变化否则就好像什么都没有发生。