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的身影.所以,即使是过时的东西,也有学习的必要,当然项目中也是可以添加的.在网上找了一个博客 ...
随机推荐
- Android开发者指南-方位传感器-Position Sensor
Android开发者指南-方位传感器-Position Sensor 转载自:http://blog.sina.com.cn/s/blog_48d4913001010zsu.html Position ...
- [转载]做一个 App 前需要考虑的几件事
本文转自http://limboy.me/tech/2016/07/06/starting-an-app.html ========================================= ...
- ASP.NET State Service服务
ASP.NET State Service服务是用来管理 Session 的,正常来说,Session 位于IIS进程中(其实可以理解成在服务器的内存中),当IIS重启或程序池回收会自动清空Sessi ...
- C# 合并DLL, 合并DLL进入EXE 【转】
使用方法非常简单 在项目属性窗口中,选择"生成事件",在"生成后事件命令行"下的文本框中输入 ilmerge /ndebug /t:dll /log c:/1/ ...
- 《Linux命令行大全》系列(二、导航)
文件系统的导航,是一个不断访问树形结构中节点的过程. 文件系统树 Linux只有一个倒立的文件系统树 不同设备可以挂载到这同一个树上 文件和子目录是此树的组成部分,最顶层的即根目录 目录 根据树节点间 ...
- Delphi XE5 Device compatibility
Delphi XE5 Device compatibility https://docs.google.com/spreadsheet/ccc?key=0AoEN2CEsVvJ0dGhVaWJE ...
- 哈希,哈希表,哈希Map
数组: 数组存储区间是连续的,占用内存严重,故空间复杂的很大.但数组的二分查找时间复杂度小,为O(1):数组的特点是:寻址容易,插入和删除困难: 链表: 链表存储区间离散,占用内存比较宽松,故空间复杂 ...
- php字符串连接
<?php$s = "a";$s .= "b";echo $s; ?> 输出 ab 字符串连接: .=
- iOS开发UI篇—UITableviewcell的性能问题
iOS开发UI篇—UITableviewcell的性能问题 一.UITableviewcell的一些介绍 UITableView的每一行都是一个UITableViewCell,通过dataSource ...
- 通过ip获取地理位置信息
http://ipinfo.io/developers 直接使用get请求 url: http://ipinfo.io/json 即可获得json数据