文档章节

刚刚学习到的Android有效的彻底退出App的方法,记录一下

since1986
 since1986
发布于 2014/04/09 09:19
字数 398
阅读 514
收藏 9

最近在写一个包含两个Activity和一个Service的App,这个App需要实现彻底退出的功能,也就是关闭所有Activity并且结束Service。

结束Service的方法比较明确,使用stopService就可以了,关键是想要结束所有Activity就需要费点劲了,一开始我尝试用

.getSystemService(ACTIVITY_SERVICE).killBackgroundProcesses(getPackageName());

这样的方法来结束掉所有Activity,但是试了一下,没有效果。然后Google了一下,看到了这篇文章,文章中的方法还是比较简单管用的,然后我又按照自己的需要对这个文章中提供的方法做了一些修改,现在基本上实现了我的App的需求。

这个方法其实很简单,就是在一个单例中维护一个Activity的list,在每个Activity的onCreate中调用这个单例的addActivity(),把当前Activity放到list中,然后想要彻底退出App(也就是finsh所有的Activity),只要调用单例中的finshAllActivities()(finshAllActivities()会遍历这个list,调用list中每一元素的finsh)就可以了。

package since1986.opensmspostman;

import java.util.Arrays;
import java.util.LinkedList;

import android.app.Activity;

public class ActivityManager {

	private LinkedList<Activity> activityLinkedList = new LinkedList<Activity>();
	
	private ActivityManager() {
	}
	
	private static ActivityManager instance;
	
	public static ActivityManager getInstance(){
		if(null == instance){
			instance = new ActivityManager();
		}
		return instance;
	}
	
	//向list中添加Activity
	public ActivityManager addActivity(Activity activity){
		activityLinkedList.add(activity);
		return instance;
	}
	
	//结束特定的Activity(s)
	public ActivityManager finshActivities(Class<? extends Activity>... activityClasses){
		for (Activity activity : activityLinkedList) {
			if( Arrays.asList(activityClasses).contains( activity.getClass() ) ){
				activity.finish();
			}
		}
		return instance;
	}
	
	//结束所有的Activities
	public ActivityManager finshAllActivities() {
		for (Activity activity : activityLinkedList) {
			activity.finish();
		}
		return instance;
	}
}


© 著作权归作者所有

since1986
粉丝 7
博文 60
码字总数 10510
作品 1
石家庄
程序员
私信 提问
Android中BindService方式使用的理解

最近学习了一下Android里面的Service的应用,在BindService部分小卡了一下,主要是开始没有彻底理解为什么要这么实现。 BindService和Started Service都是Service,有什么地方不一样呢: 1....

大凉龙雀
2013/04/04
0
0
Android中BindService方式使用的理解

最近学习了一下Android里面的Service的应用,在BindService部分小卡了一下,主要是开始没有彻底理解为什么要这么实现。 BindService和Started Service都是Service,有什么地方不一样呢: 1....

大凉龙雀
2013/03/02
0
0
【android学习之十二】——SDK实例NotePad 分析1

经过前面近半个月的学习,虽然很多控件与相关的事件都会单独使用与操作,但是至今还没有真正做个比较完成的例子,因为毕竟刚开始学习不久而且都是学习的一些控件的基础操作与数据库操作。网上...

晨曦之光
2012/03/08
1K
1
【android基础学习之二】——基础控件ListView

声明:学习的书籍《Android应用开发揭秘》,这里记录学习该书籍的日志,引用的相关代码与总结描述,没有商业的用途,完全是自我学习的一个记录,刚刚学习不可避免会出现很多问题,若是有错误...

晨曦之光
2012/03/08
656
0
小白学phoneGap《构建跨平台APP:phoneGap移动应用实战》连载二(生命周期)

1 什么是生命周期 想要真正地理解PhoneGap应用开发的内涵,首先需要理解什么是生命周期。这在字面上其实非常容易理解,一个应用从开始运行被手机加载到应用被退出之间的过程就称之为一个生命...

woiwoi
2014/10/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Redis缓存穿透、缓存雪崩和缓存击穿

Redis缓存穿透、缓存雪崩 缓存雪崩,是指在某一个时间段,缓存集中过期失效。 产生雪崩的原因之一,比如在写本文的时候,马上就要到双十二零点,很快就会迎来一波抢购,这波商品时间比较集中...

architect刘源源
24分钟前
7
1
ArrayList源码分析

一、核心变量 // 序列化ID private static final long serialVersionUID = 8683452581122892189L; // 默认初始化容量 private static final int DEFAULT_CAPACITY = 10; ......

星爵22
33分钟前
3
0
++a a++的再次理解

public class Test { //// public static void main(String[] args) throws InterruptedException { // TODO Auto-generated method stub int a=1; int b=2; int c; int d; c=......

南桥北木
33分钟前
2
0
整合Spring和SpringMVC

1.Spring容器和SpringMVC容器的关系 Spring容器是一个父容器,SpringMVC容器是一个子容器,它继承自Spring容器。因此,在SpringMVC容器中,可以访问到Spring容器中定义的Bean,而在Spring容器...

薛小二
34分钟前
2
0
递归实现后序遍历二叉树

问题描述 从键盘接受输入先序序列,以二叉链表作为存储结构,建立二叉树(以先序来建立)并对其进行后序遍历,然后将遍历结果打印输出。要求采用递归方法实现。 解题思路 递归实现 程序实现 ...

niithub
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部