接触Android开发没多久,最近开发一个项目,在进行Activity的退出时遇到一些问题——偶尔当出现覆盖的Activity时,使用System.Exit(0),虽然结束当前进程,但是并没有退出程序,而且显示另外一个Activity。
如:Activity A为登录Activity,退出登录跳转到主Activity B,在Activity B中退出登录,跳转到Activity A,但是并没有结束Activity B,再从Activity A跳转到Activity B,这时使用System.Exit(0),并没有退出程序,而是返回最开始的那个Activity B,因为这时Activity覆盖了。
为解决这个问题尝试了很多的方法,最后解决了问题:使用Activity队列,可能很多的大能应该都知道,写在这里为方便记忆同时帮助和我一样的才接触的人。
首先新建一个工具类SysApplication.java
/**
* 工具类 用来结束所有后台activity
* @author Stanny
*
*/
public class SysApplication extends Application {
//运用list来保存们每一个activity是关键
private List<Activity> mList = new LinkedList<Activity>();
//为了实现每次使用该类时不创建新的对象而创建的静态对象
private static SysApplication instance;
//构造方法
private SysApplication(){}
//实例化一次
public synchronized static SysApplication getInstance(){
if (null == instance) {
instance = new SysApplication();
}
return instance;
}
// add Activity
public void addActivity(Activity activity) {
mList.add(activity);
}
//关闭每一个list内的activity
public void exit() {
try {
for (Activity activity:mList) {
if (activity != null)
activity.finish();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
System.exit(0);
}
}
//杀进程
public void onLowMemory() {
super.onLowMemory();
System.gc();
}
}
这个类有两个方法:
addActivity(),用于添加Activity进入队列,每次新建一个Activity时,都在onCreate()方法中执行一次添加,将Activity添加进队列
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.act_baby_info);
SysApplication.getInstance().addActivity(this);
// 初始化控件
initview();
}
exit(),就是用于结束进程的方法,在需要结束时调用就可关闭所有的Activity
SysApplication.getInstance().exit();