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
相关推荐
下面将详细解释TabHost和ActivityGroup的相关知识点。 **TabHost** 是Android系统提供的一种UI组件,用于创建带有标签页的界面。它允许开发者在一个Activity中展示多个小的Activity或者View,并通过标签页切换。...
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent); ``` - **`Intent.FLAG_ACTIVITY_SINGLE_TOP`** - 如果当前任务栈的顶部已经存在目标`Activity`的实例,则直接复用这个实例,并调用...
尽管如此,理解ActivityGroup的工作原理对于学习Android的历史以及一些遗留应用的维护仍然有价值。 ActivityGroup是android.app.LocalActivityManager的包装器,它允许你管理一组内部的Activity。在早期版本的...
通过阅读和理解这段代码,学生可以了解如何将这些组件结合在一起,处理事件监听,以及如何通过Intent传递数据在Activity之间。同时,源码还可以帮助学生深入理解Android的生命周期管理和布局管理。 论文部分可能...
Android使用ActivityGroup设置androidwindowSoftInputMode失效的问题 - 农民伯伯 - 博客园.mht349.66 KB [Android1_5]ActivityManager [1] Killed am start -n - 农民伯伯 - 博客园.mht346.22 KB [Android1_5]...
Window window = getLocalActivityManager().startActivity(childTag, intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)); if (window != null) { setContentView(window.getDecorView()); } } @Override ...
Window window = getLocalActivityManager().startActivity(tag, intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)); if (window != null) { views.put(tag, window); setContentView(window.getDecorView()); ...
ActivityGroup + GridView + ViewFlipper 实现选项卡.zip Adroid UI 界面绘制原理分析.rar AnderWeb-android_packages_apps_Launcher-4458ee4.zip andorid 源码北京公交线路查询(离线).zip android Gallery实现...
在Android开发中,ActivityGroup是一种特殊类型的Activity,它允许开发者在一个Activity内嵌套其他Activity,实现类似TabHost或Fragment的效果,但这是在Android早期版本(API级别较低)中的一种实现方式。...
本资源“Android源码——TabHost内嵌ActivityGroup界面管理源码_new_17.zip”提供了一种实现复杂界面布局的方式,下面将详细解释这两个组件以及它们在源码中的应用。 首先,TabHost是Android提供的一个用于创建带有...
在Android开发中,TabHost和ActivityGroup是两个关键组件,常用于实现多页面的导航和切换效果,构建复杂的用户界面。TabHost是一个容器,可以显示一个或多个Tab,每个Tab通常对应一个不同的Activity或者Fragment。...
通过本文档的学习,我们可以了解到Android应用程序组件之间如何进行通信,以及如何正确地使用系统Intent和权限来增强应用的功能。此外,我们还介绍了如何利用Fragment来构建更复杂的用户界面。这些知识点对于深入...
【eoeAndroid特刊】第15期: Android...[eoeAndroid特刊】第18期:Android...ActivityGroup +GridView + ViewFlip...Adroid UI界面绘制原理分析 AnderWeb-android_packages_apps_...andorid 源码北京公交线路查询...
Window window = getLocalActivityManager().startActivity(name, intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)); if (window != null) { return window.getDecorView(); } } return null; } // 添加...
在Android开发中,`ActivityGroup`是一个特殊类型的`Activity`,它允许我们在一个父`Activity`中嵌套多个子`Activity`。这个概念通常用于实现类似TabHost或者多级导航的效果,使得用户可以在一个单一的栈结构中进行...
在本文中,我们将深入探讨如何使用ActivityGroup来实现Tab功能,以及它的工作原理和限制。 1. **ActivityGroup的介绍** ActivityGroup是android.app.Activity的一个子类,它提供了在同一个栈中管理多个Activity的...
在Android开发中,ActivityGroup是早些版本API中提供的一种特殊类型的Activity,它允许开发者在一个TabHost或者帧布局(FrameLayout)中嵌套多个Activity,从而实现类似iOS中UINavigationController的堆叠管理器效果...
在Android开发中,ActivityGroup是一种特殊的布局管理器,它允许在一个TabHost中嵌套多个Activity。这个框架的设计目的是为了提供更复杂的应用结构,使得在单个Tab内可以切换不同的Activity,而不仅仅是显示单一内容...
6. **异常处理和回退栈管理**:由于ActivityGroup的特殊性,回退栈(back stack)管理可能会比较复杂,需要手动处理回退按钮的事件,以及处理可能的异常情况,如内存泄漏或资源未释放。 7. **升级到Fragment**:...