ActivityGroup简介
1.ActivityGroup的核心就是继承了该类,能够通过getLocalActivityManager()得到一个LocalActivityManager
如,LocalActivityManager am= getLocalActivityManager();
2.然后通过LocalActivityManager通过startActivity(String id, Intent intent),可以与指定的Actiivty绑定,并且返回一个Window。LocalActivityManager可以同时管理多个Activity
Window window1 = am.startActivity("Module1", newIntent(TestView.this, ModuleView1.class));
Window window2 = am.startActivity("Module2", newIntent(TestView.this, ModuleView2.class));
3.然后Window可以通过getDecorView()方法,返回一个View,然后通过与指定容器的addView(View)方法,实现不同的效果
View view1 = window1.getDecorView()
View view2 = window2.getDecorView()
实际中多用简写形式,如,
container是ScrollView的一个实例
container.removeAllViews(); //移除其他所有子视图
container.addView(getLocalActivityManager().startActivity(
"Module2",
new Intent(TestView.this, ModuleView2.class)
.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP) )
.getDecorView());
注意:
container.removeAllViews():表示在显示该视图之前,先移除其他所有视图.
Intent.FLAG_ACTIVITY_CLEAR_TOP:如果在当前Task中,有要启动的Activity,那么把该Acitivity之前的所有Activity都关掉,并把此Activity置前以避免创建Activity的实例
这种方式具有很大的灵活性,常用的就是实现TabHost分页效果,但很好的避免的TabHost的缺点,如title等
如果已经启动了四个Activity:A,B,C和D。在D Activity里,我们要跳到B Activity,同时希望C finish掉,可以在startActivity(intent)里的intent里添加flags标记,如下所示:
Intent intent = new Intent(this, B.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent);
这样启动B Activity,就会把D,C都finished掉,如果你的B Activity的启动模式是默认的(multiple) ,则B Activity会finished掉,再启动一个新的Activity B。 如果不想重新再创建一个新的B Activity,则在上面的代码里再加上:
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
这样B Activity就会再创建一个新的了,而是会重用之前的B Activity,同时调用B Activity的onNewIntent()方法。
问题:
多activity中退出整个程序,例如从A->B->C->D,这时我需要从D直接退出程序。
网上资料:{
finish()和system(0)都只能退出单个activity。杀进程等的等方式都不行~~~
解决问题:
我们知道Android的窗口类提供了历史栈,我们可以通过stack的原理来巧妙的实现,这里我们在D窗口打开A窗口时在Intent中直接加入标志Intent.FLAG_ACTIVITY_CLEAR_TOP,再次开启A时将会清除该进程空间的所有Activity。
在D中使用下面的代码:
Intent intent = new Intent(); intent.setClass(D.this, A.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); //注意本行的FLAG设置 startActivity(intent); finish();
关掉自己
在A中加入代码:
Override protected void onNewIntent(Intent intent) { // TODO Auto-generated method stub super.onNewIntent(intent); //退出 if ((Intent.FLAG_ACTIVITY_CLEAR_TOP & intent.getFlags()) != 0) { finish(); } }
A的Manifest.xml配置成android:launchMode="singleTop"
原理总结:
一般A是程序的入口点,从D起一个A的activity,加入标识Intent.FLAG_ACTIVITY_CLEAR_TOP这个过程中会把栈中B,C,都清理掉。因为A是android:launchMode="singleTop"
不会调用oncreate(),而是响应onNewIntent()这时候判断Intent.FLAG_ACTIVITY_CLEAR_TOP,然后把A finish()掉。
栈中A,B,C,D全部被清理。所以整个程序退出了。
http://blog.csdn.net/gaogaoshan/article/details/7400796
相关推荐
前几年的Android应用源码Demo,主要面向的是学生毕业设计学习。
Android应用源码开发Demo,主要用于毕业设计学习。
Android使用ActivityGroup设置androidwindowSoftInputMode失效的问题 - 农民伯伯 - 博客园.mht349.66 KB [Android1_5]ActivityManager [1] Killed am start -n - 农民伯伯 - 博客园.mht346.22 KB [Android1_5]...
NULL 博文链接:https://woshiwzy.iteye.com/blog/812707
ActivityGroup + GridView + ViewFlipper 实现选项卡.zip Adroid UI 界面绘制原理分析.rar AnderWeb-android_packages_apps_Launcher-4458ee4.zip andorid 源码北京公交线路查询(离线).zip android Gallery实现...
【eoeAndroid特刊】第15期: Android...[eoeAndroid特刊】第18期:Android...ActivityGroup +GridView + ViewFlip...Adroid UI界面绘制原理分析 AnderWeb-android_packages_apps_...andorid 源码北京公交线路查询...
NULL 博文链接:https://1002878825-qq-com.iteye.com/blog/1812628
TabHost内嵌ActivityGroup界面管理源码.zip
Android源码——TabHost内嵌ActivityGroup界面管理源码_new_17.zip
Android开发—使用ActivityGroup来切换Activity和Layout.pdf
Android--开发--ActivityGroup + GridView + ViewFlipper 实现选项卡
Android源码——TabHost内嵌ActivityGroup界面管理源码_new_17.7z
安卓Android源码——TabHost内嵌ActivityGroup界面管理源码.zip
ActivityGroup + GridView + ViewFlipper 实现选项卡_Android
为ActivityGroup能往界面上不停的添加界面,这样就能实现界面的叠加效果,但是你叠加的时候就会发现,叠加上去的界面不会显示下面的选项卡, 而且你的返回键,也不好使。这个源码就是用到TabActivity内嵌ActivityGroup...
ActivityGroup的用法,头部和底部为固定布局中间动态显示界面 并在中间布局实现手势滑动效果,自定义SlidingDrawer(抽屉)效果,在ActivityGroup里执行跳转等功能。至于在Android在ActivityGroup里执行跳转详细介绍 ...
今天在网上看到了一篇文章,原文是http://united-coders.com网站的http://united-coders.com/nico-heid/use-android-activitygroup-within-tabhost-to-show-different-activity 特意留下来 供大家和自己以后使用:
ActivityGroup 多个activity页面返回 子activity menu设置
用ActivityGroup实现的activity栈,类似IOS的UINavigationController