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简单介绍的更多相关文章

  1. [原创]关于mybatis中一级缓存和二级缓存的简单介绍

    关于mybatis中一级缓存和二级缓存的简单介绍 mybatis的一级缓存: MyBatis会在表示会话的SqlSession对象中建立一个简单的缓存,将每次查询到的结果结果缓存起来,当下次查询的时候 ...

  2. 利用Python进行数据分析(7) pandas基础: Series和DataFrame的简单介绍

    一.pandas 是什么 pandas 是基于 NumPy 的一个 Python 数据分析包,主要目的是为了数据分析.它提供了大量高级的数据结构和对数据处理的方法. pandas 有两个主要的数据结构 ...

  3. 利用Python进行数据分析(4) NumPy基础: ndarray简单介绍

    一.NumPy 是什么 NumPy 是 Python 科学计算的基础包,它专为进行严格的数字处理而产生.在之前的随笔里已有更加详细的介绍,这里不再赘述. 利用 Python 进行数据分析(一)简单介绍 ...

  4. yii2的权限管理系统RBAC简单介绍

    这里有几个概念 权限: 指用户是否可以执行哪些操作,如:编辑.发布.查看回帖 角色 比如:VIP用户组, 高级会员组,中级会员组,初级会员组 VIP用户组:发帖.回帖.删帖.浏览权限 高级会员组:发帖 ...

  5. angular1.x的简单介绍(二)

    首先还是要强调一下DI,DI(Denpendency Injection)伸手获得,主要解决模块间的耦合关系.那么模块是又什么组成的呢?在我看来,模块的最小单位是类,多个类的组合就是模块.关于在根模块 ...

  6. Linux的简单介绍和常用命令的介绍

    Linux的简单介绍和常用命令的介绍 本说明以Ubuntu系统为例 Ubuntu系统的安装自行百度,或者参考http://www.cnblogs.com/CoderJYF/p/6091068.html ...

  7. iOS-iOS开发简单介绍

    概览 终于到了真正接触IOS应用程序的时刻了,之前我们花了很多时间去讨论C语言.ObjC等知识,对于很多朋友而言开发IOS第一天就想直接看到成果,看到可以运行的IOS程序.但是这里我想强调一下,前面的 ...

  8. iOS开发多线程篇—多线程简单介绍

    iOS开发多线程篇—多线程简单介绍 一.进程和线程 1.什么是进程 进程是指在系统中正在运行的一个应用程序 每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内 比如同时打开QQ.Xcod ...

  9. iOS开发UI篇—UITabBarController简单介绍

    iOS开发UI篇—UITabBarController简单介绍 一.简单介绍 UITabBarController和UINavigationController类似,UITabBarControlle ...

随机推荐

  1. Java 通过 BufferReader 实现 文件 写入读取 示例

    package com.javatest.techzero.gui; import java.io.BufferedReader; import java.io.File; import java.i ...

  2. 施用 maven shade plugin 解决 jar 或类的多版本冲突

    施用 maven shade plugin 解决 jar 或类的多版本冲突   使用 maven shade plugin 解决 jar 或类的多版本冲突java 应用经常会碰到的依赖的三方库出现版本 ...

  3. boost在windows下的编译(vs2010)

    首先说下环境,win7,vs2010. 先在http://www.boost.org/users/download/上下载boost安装包,我下的是1.52.0版. 按照说明,直接运行“bootstr ...

  4. Linux开发环境的搭建和使用——Linux 常用的命令使用

    概要 视或电影中看到过类似的场景,黑客面对一个黑色的屏幕,上面飘着密密麻麻的字符,梆梆一顿敲,就完毕了窃取资料的任务. Linux 刚出世时没有什么图形界面.全部的操作全靠命令完毕.就如同电视里的黑客 ...

  5. linux下C/C++,多线程pthread《转载》

    原文网址:http://www.cnblogs.com/xianghang123/archive/2011/08/11/2134927.html ·线程创建   函数原型:int pthread_cr ...

  6. 简单概率dp(期望)-zoj-3640-Help Me Escape

    题目链接: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4808 题目大意: 有n条路,选每条路的概率相等,初始能力值为f,每 ...

  7. 【源代码】基于Android和蓝牙的单片机温度採集系统

    如需转载请标明出处:http://blog.csdn.net/itas109 QQ技术交流群:129518033 STC89C52单片机通过HC-06蓝牙模块与Android手机通信实例- 基于And ...

  8. 第四章 Spring与JDBC的整合

    这里选择的是mysql数据库. 4.1引入aop.tx的命名空间 为了事务配置的需要,我们引入aop.tx的命名空间 <?xml version="1.0" encoding ...

  9. ThinkPhp学习07

    原文:ThinkPhp学习07 简单CRUD操作 public function show() { $m=M('User'); // $arr=$m->find(2); //查找id=2的数据, ...

  10. 模仿《百度音乐HD》添加到下载框动画

    上次听有人说喜欢<百度音乐HD>添加到下载动画 ,我就尝试模仿了下,没想到,今天code4app(地址)也有了这个,但是 这个动画基本相同,我们的思路还是部一样的. 都可以参考 .主要关键 ...