首先说明的一点就是,真正意义上的完全退出程序在应用层上其实还是做不到的。我们在应用层上所做的退出程序,都只是关闭了当前的前台程序,而后台程序其实还是在运行着的。
这里我们的思路就是把所有的Activity收集起来,然后再统一进行关闭。那么怎么来收集Activity呢?我们都知道Activity是一个对象,那么是用数组吗?如果用数组,我们就得给一个定长的数组来进行限制,数组的大小大了不好,小了更是是要命的事。那用什么?我们对对象的收集处理一般是用List<...>或是其衍生。。。
这里我们用List<Activity>来保存Activity:
private List<Activity> activityList = new LinkedList<Activity>();
再定义一个对外的方法接口,用于接收Activity:
public void addActivity(Activity activity) {
activityList.add(activity);
}
最后统一finish();
public void exit() {
for (Activity activity : activityList) {
activity.finish();
}
System.exit(0);
}
当我们创建了一个Activity的同时,我们就把这个Activity添加到我们List<Activity>中来,如下:
EyeApplicationManager.getInstance().addActivity(this);
---------------------------------------- 管理Activity退出类的代码如下 ---------------------------------------
package com.android.password.application;
import java.util.LinkedList;
import java.util.List;
import android.app.Activity;
/**
* 这个类是用单例模式实现的一个
* 用来退出程序的类
* @author William-H
* 开发日期:2014年8月22日
*/
public class EyeApplicationManager {
private List<Activity> activityList = new LinkedList<Activity>();
private static EyeApplicationManager instance;
private EyeApplicationManager() {
}
/**
* 单例模式中获取唯一的MyApplication实例
* @return
*/
public static EyeApplicationManager getInstance() {
if (null == instance) {
instance = new EyeApplicationManager();
}
return instance;
}
/**
* 添加Activity到容器中
* @param activity
*/
public void addActivity(Activity activity) {
activityList.add(activity);
}
/**
* 遍历所有Activity并finish
*/
public void exit() {
for (Activity activity : activityList) {
activity.finish();
}
System.exit(0);
}
}
如果你足够细致,我想你应该会发现,其实,这个类能做的可不是只有退出程序这么简单。。。关于退出程序,我之前也有写过一篇是关于双击返回键退出程序,点击连接进行博客。。。
那在Demo中究竟是怎么样来使用呢?点击查看源码