ActivityGroup简单介绍
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所有被清理。所以整个程序退出了。
ActivityGroup简单介绍的更多相关文章
- [原创]关于mybatis中一级缓存和二级缓存的简单介绍
关于mybatis中一级缓存和二级缓存的简单介绍 mybatis的一级缓存: MyBatis会在表示会话的SqlSession对象中建立一个简单的缓存,将每次查询到的结果结果缓存起来,当下次查询的时候 ...
- 利用Python进行数据分析(7) pandas基础: Series和DataFrame的简单介绍
一.pandas 是什么 pandas 是基于 NumPy 的一个 Python 数据分析包,主要目的是为了数据分析.它提供了大量高级的数据结构和对数据处理的方法. pandas 有两个主要的数据结构 ...
- 利用Python进行数据分析(4) NumPy基础: ndarray简单介绍
一.NumPy 是什么 NumPy 是 Python 科学计算的基础包,它专为进行严格的数字处理而产生.在之前的随笔里已有更加详细的介绍,这里不再赘述. 利用 Python 进行数据分析(一)简单介绍 ...
- yii2的权限管理系统RBAC简单介绍
这里有几个概念 权限: 指用户是否可以执行哪些操作,如:编辑.发布.查看回帖 角色 比如:VIP用户组, 高级会员组,中级会员组,初级会员组 VIP用户组:发帖.回帖.删帖.浏览权限 高级会员组:发帖 ...
- angular1.x的简单介绍(二)
首先还是要强调一下DI,DI(Denpendency Injection)伸手获得,主要解决模块间的耦合关系.那么模块是又什么组成的呢?在我看来,模块的最小单位是类,多个类的组合就是模块.关于在根模块 ...
- Linux的简单介绍和常用命令的介绍
Linux的简单介绍和常用命令的介绍 本说明以Ubuntu系统为例 Ubuntu系统的安装自行百度,或者参考http://www.cnblogs.com/CoderJYF/p/6091068.html ...
- iOS-iOS开发简单介绍
概览 终于到了真正接触IOS应用程序的时刻了,之前我们花了很多时间去讨论C语言.ObjC等知识,对于很多朋友而言开发IOS第一天就想直接看到成果,看到可以运行的IOS程序.但是这里我想强调一下,前面的 ...
- iOS开发多线程篇—多线程简单介绍
iOS开发多线程篇—多线程简单介绍 一.进程和线程 1.什么是进程 进程是指在系统中正在运行的一个应用程序 每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内 比如同时打开QQ.Xcod ...
- iOS开发UI篇—UITabBarController简单介绍
iOS开发UI篇—UITabBarController简单介绍 一.简单介绍 UITabBarController和UINavigationController类似,UITabBarControlle ...
随机推荐
- MSSQL - 逻辑主键、业务主键和复合主键
转载自:http://blog.csdn.net/sunrise918/article/details/5575054 这几天对逻辑主键.业务主键和复合主键进行了一些思考,也在网上搜索了一下相关的讨论 ...
- Delphi + Asm - TBits类的学习
技术交流,DH讲解. 在D2010的classes中有个TBits类,这个类主要是位操作的. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 TBits = class privat ...
- html5 canvas 实现一个简单的叮当猫头部
原文:html5 canvas 实现一个简单的叮当猫头部 html5的canvas是很强大的,今天也是温习了一下之前的基础知识,然后学着做了一个简单的小案例.虽然在这一块几乎空白,但还是乐于尝试... ...
- 1.1.2-学习Opencv与MFC混合编程之---画图工具 画直线 画圆 画矩形
源代码地址:http://download.csdn.net/detail/nuptboyzhb/3961685 画图工具 1. 画直线 Ø 增加‘直线’菜单项,建立类向导: Ø 对CXX ...
- HTML5 input placeholder 颜色 改动
David Murdoch:Chrome支持input=[type=text]占位文本属性,但下列CSS样式却不起作用: CSS input[placeholder], [placeholder], ...
- 原始的js代码和jquery对比
Even a task as simple as this can be complicated without jQuery at our disposal. In plain JavaScript ...
- poj 2786 - Keep the Customer Satisfied
Description Simon and Garfunkel Corporation (SG Corp.) is a large steel-making company with thousa ...
- delpi中的RTTI初试
java中的反射机制使我们能够在运行期间获取运行期类的信息,那么在delphi中有没有这样的功能呢?答案是有,实现这种功能的机制在delphi中叫做RTTI,废话少说,先来一段demo: 1.先定义一 ...
- meta viewport标签的使用说明(手机浏览缩放控制)
网页中有这么一句时,在iPhone的浏览器中将以原始大小显示,并不允许缩放. <meta name="viewport" content="width=device ...
- 14.6.1 Creating InnoDB Tables 创建InnoDB 表:
14.6.1 Creating InnoDB Tables 创建InnoDB 表: 创建一个InnoDB 表,使用CREATE TABLE 语句,你不需要指定 ENGINE=InnoDB子句 如果In ...