`

ActivityGroup相关--getLocalActivityManager() 以及intent.setFlags(Intent.FLAG_ACTIVIT

阅读更多

 

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 TabHost内嵌ActivityGroup界面管理源码-IT计算机-毕业设计.zip

    下面将详细解释TabHost和ActivityGroup的相关知识点。 **TabHost** 是Android系统提供的一种UI组件,用于创建带有标签页的界面。它允许开发者在一个Activity中展示多个小的Activity或者View,并通过标签页切换。...

    安卓活动组

    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent); ``` - **`Intent.FLAG_ACTIVITY_SINGLE_TOP`** - 如果当前任务栈的顶部已经存在目标`Activity`的实例,则直接复用这个实例,并调用...

    ActivityGroup应用-如何把一个Activity加载成一个视图

    尽管如此,理解ActivityGroup的工作原理对于学习Android的历史以及一些遗留应用的维护仍然有价值。 ActivityGroup是android.app.LocalActivityManager的包装器,它允许你管理一组内部的Activity。在早期版本的...

    ActivityGroup + GridView + ViewFlipper 实现选项卡-IT计算机-毕业设计.zip

    通过阅读和理解这段代码,学生可以了解如何将这些组件结合在一起,处理事件监听,以及如何通过Intent传递数据在Activity之间。同时,源码还可以帮助学生深入理解Android的生命周期管理和布局管理。 论文部分可能...

    Android帮助文档及一些资料打包放送

    Android使用ActivityGroup设置androidwindowSoftInputMode失效的问题 - 农民伯伯 - 博客园.mht349.66 KB [Android1_5]ActivityManager [1] Killed am start -n - 农民伯伯 - 博客园.mht346.22 KB [Android1_5]...

    Android TabHost内嵌ActivityGroup界面管理源码.rar

    Window window = getLocalActivityManager().startActivity(childTag, intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)); if (window != null) { setContentView(window.getDecorView()); } } @Override ...

    ActivityGroup之Activity内跳转和外跳转

    Window window = getLocalActivityManager().startActivity(tag, intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)); if (window != null) { views.put(tag, window); setContentView(window.getDecorView()); ...

    Andorid项目源码(167套)

    ActivityGroup + GridView + ViewFlipper 实现选项卡.zip Adroid UI 界面绘制原理分析.rar AnderWeb-android_packages_apps_Launcher-4458ee4.zip andorid 源码北京公交线路查询(离线).zip android Gallery实现...

    Android开发—使用ActivityGroup来切换Activity和Layout.pdf

    在Android开发中,ActivityGroup是一种特殊类型的Activity,它允许开发者在一个Activity内嵌套其他Activity,实现类似TabHost或Fragment的效果,但这是在Android早期版本(API级别较低)中的一种实现方式。...

    Android源码——TabHost内嵌ActivityGroup界面管理源码_new_17.zip

    本资源“Android源码——TabHost内嵌ActivityGroup界面管理源码_new_17.zip”提供了一种实现复杂界面布局的方式,下面将详细解释这两个组件以及它们在源码中的应用。 首先,TabHost是Android提供的一个用于创建带有...

    Android代码-TabHost内嵌ActivityGroup界面管理源码.zip

    在Android开发中,TabHost和ActivityGroup是两个关键组件,常用于实现多页面的导航和切换效果,构建复杂的用户界面。TabHost是一个容器,可以显示一个或多个Tab,每个Tab通常对应一个不同的Activity或者Fragment。...

    APP开发教程 Java Android移动端开发 6、Android应用程序组件之二-Activity交互及权限 共24页.pptx

    通过本文档的学习,我们可以了解到Android应用程序组件之间如何进行通信,以及如何正确地使用系统Intent和权限来增强应用的功能。此外,我们还介绍了如何利用Fragment来构建更复杂的用户界面。这些知识点对于深入...

    Andorid案例分享 168套

    【eoeAndroid特刊】第15期: Android...[eoeAndroid特刊】第18期:Android...ActivityGroup +GridView + ViewFlip...Adroid UI界面绘制原理分析 AnderWeb-android_packages_apps_...andorid 源码北京公交线路查询...

    高仿微信的界面 - ActivityGroup + GridView 实现Tab分页

    Window window = getLocalActivityManager().startActivity(name, intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)); if (window != null) { return window.getDecorView(); } } return null; } // 添加...

    activitygroup

    在Android开发中,`ActivityGroup`是一个特殊类型的`Activity`,它允许我们在一个父`Activity`中嵌套多个子`Activity`。这个概念通常用于实现类似TabHost或者多级导航的效果,使得用户可以在一个单一的栈结构中进行...

    ActivityGroup实现tab功能

    在本文中,我们将深入探讨如何使用ActivityGroup来实现Tab功能,以及它的工作原理和限制。 1. **ActivityGroup的介绍** ActivityGroup是android.app.Activity的一个子类,它提供了在同一个栈中管理多个Activity的...

    ActivityGroup实现Activit栈

    在Android开发中,ActivityGroup是早些版本API中提供的一种特殊类型的Activity,它允许开发者在一个TabHost或者帧布局(FrameLayout)中嵌套多个Activity,从而实现类似iOS中UINavigationController的堆叠管理器效果...

    ActivityGroup框架

    在Android开发中,ActivityGroup是一种特殊的布局管理器,它允许在一个TabHost中嵌套多个Activity。这个框架的设计目的是为了提供更复杂的应用结构,使得在单个Tab内可以切换不同的Activity,而不仅仅是显示单一内容...

    ActivityGroup应用实例

    6. **异常处理和回退栈管理**:由于ActivityGroup的特殊性,回退栈(back stack)管理可能会比较复杂,需要手动处理回退按钮的事件,以及处理可能的异常情况,如内存泄漏或资源未释放。 7. **升级到Fragment**:...

Global site tag (gtag.js) - Google Analytics