ActivityGroup相关--getLocalActivityManager()
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的一个实例
01.container.removeAllViews(); //移除其他所有子视图
02.container.addView(getLocalActivityManager().startActivity(
03. "Module2",
04. new Intent(TestView.this, ModuleView2.class)
05. .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP) )
06. .getDecorView());
01.intent.setClass(getApplicationContext(),TestAutoLayoutActivity.class);
02.intent.putExtra("buttonid", jujiPage);
03.context.removeAllViews();
04.context.addView(getLocalActivityManager().startActivity(
05. intent.getComponent().getShortClassName(),
06. intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP))
07. .getDecorView());
01.intent.getComponent().getShortClassName()是TestAutoLayoutActivity.class在mainfest.xml的activity Id .testAutoLayout.TestAutoLayoutActivity
01.<activity android:name=".testAutoLayout.TestAutoLayoutActivity" >
02.lt;/activity>
注意: 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标记,如下所示:
01.Intent intent = new Intent(this, B.class);
02.intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
03.startActivity(intent);
这样启动B Activity,就会把D,C都finished掉,如果你的B Activity的启动模式是默认的(multiple) ,则B Activity会finished掉,再启动一个新的Activity B。 如果不想重新再创建一个新的B Activity,则在上面的代码里再加上:
01.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中使用下面的代码:
01.Intent intent = new Intent();
02.intent.setClass(D.this, A.class);
03.intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); //注意本行的FLAG设置
04.startActivity(intent);
05.finish();
关掉自己 在A中加入代码:
01.Override
02.protected void onNewIntent(Intent intent) {
03.// TODO Auto-generated method stub
04.super.onNewIntent(intent);
05.//退出
06. if ((Intent.FLAG_ACTIVITY_CLEAR_TOP & intent.getFlags()) != 0) {
07. finish();
08. }
09.}
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相关--getLocalActivityManager()的更多相关文章
- ActivityGroup相关--getLocalActivityManager() 以及intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)用法
ActivityGroup简介 1.ActivityGroup的核心就是继承了该类,能够通过getLocalActivityManager()得到一个LocalActivityManager 如,Lo ...
- 嵌入式单片机STM32应用技术(课本)
目录SAIU R20 1 6 第1页第1 章. 初识STM32..................................................................... ...
- ActivityGroup、TabHost之子页面不刷新——getLocalActivityManager() 以及intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)用法
TabHost继承自ActivityGroup,以下不再单独列出. ActivityGroup在第一次创建的时候会完整的执行子Activity或子view的生命周期,但在从其他子activity或子v ...
- 使用ActivityGroup类显示多个Activity
有些情况下需要把一个Activity分割成几部分,如上半部分绘制图形,下半部分显示图表,这时就需要用到ActivityGroup. 定义一个类继承自ActivityGroup,Java文件如下: pa ...
- ActivityGroup里面装的子Activity不执行OnActivityResult()的解决办法
转自http://blog.csdn.net/snakewarhead/article/details/7976831 tab activity 中调用startActivityForResult 以 ...
- ActivityGroup+LinearLayout实现iphone风格的底部tab菜单
public class ActsGroup extends ActivityGroup { private LinearLayout bodyView; private Line ...
- 使用ActivityGroup来切换Activity和Layout
前言 在一个主界面中做Activity切换一般都会用TabActivity,使用方便,Activity互相之间相对独立,但是可定制性不强,而且修改起来很麻烦.当然也可以把layout分开,把逻辑代码全 ...
- ActivityGroup简单介绍
ActivityGroup简单介绍 1.ActivityGroup的核心就是继承了该类,可以通过getLocalActivityManager()得到一个LocalActivityManager 如, ...
- Android项目---ActivityGroup的使用
ActivityGroup在一年前已经被说明不用了,但是腾讯QQ,新浪微博上也不乏ActivityGroup的身影.所以,即使是过时的东西,也有学习的必要,当然项目中也是可以添加的.在网上找了一个博客 ...
随机推荐
- Firebird 同一字段的多行合并为一行
Firebird 同一字段的多行合并为一行用LIST函数类似于MYSQL的GROUP_CONCAT. 具体用法如下: SELECT LIST(a.GG_NAME||':'||a.GG_VALUE) ...
- java 异常小结
异常大体分为编译异常和运行异常两类,如果用软件开发(如Eclipse)编译异常在写代码时得到提醒, 而运行异常需要在运行时才能得到提示. 算术异常类:ArithmeticExecption 这个异常是 ...
- sublime部署开发环境
安装nodejs 去官网下载安装,暂时不建议安装5.0以上版本. 命令行运行以下命令查看是否安装成功: 全局安装gulp $ npm install -g gulp 全局安装requirejs 压缩资 ...
- IT专业人士如何更有效的学习专业知识
查看: http://www.cnblogs.com/suizhouqiwei/archive/2010/05/17/1737265.html 书:http://www.cnblogs.com/wxi ...
- JAVA与编译语言及解释语言的关系
转自JAVA结合了编译和解释执行的优点 编译型语言是一次性编译成机器码,脱离开发环境独立运行,所以运行效率较高,但是由于编译成的是特定平台上机器码,所以可移植性差. 编译型语言的典型代表有C.C++. ...
- Webx之表单验证
引入服务器端表单验证service,是通过在webx.xml中通过服务引入的方式完成的.例如,在user相关信息的表单验证的产生过程是这样的:webx-user.xml通过 <beans:imp ...
- [LeetCode] Burst Balloons (Medium)
Burst Balloons (Medium) 这题没有做出来. 自己的思路停留在暴力的解法, 时间复杂度很高: 初始化maxCount = 0. 对于当前长度为k的数组nums, 从0到k - 1逐 ...
- java WeakReference
在Java 1.2中就引入了java.lang.ref这个包,WeakReference就属于这个包.WeakReference是干嘛的呢,一言弊之,它是和Java中的垃圾回收相关的.如果一个对象只有 ...
- Learing WCF Chapter1 Fundamental WCF Concepts
At its core,WCF is a development platform for service-oriented applications. As I mentioned earlier, ...
- java基础(十四)集合(一)
这里有我之前上课总结的一些知识点以及代码大部分是老师讲的笔记 个人认为是非常好的,,也是比较经典的内容,真诚的希望这些对于那些想学习的人有所帮助! 由于代码是分模块的上传非常的不便.也比较多,讲的也是 ...