笔记93--完全退出应用程序

一、现象

在activity中调用System.exit(0),可以退出应用。但是,如果应用运行时打开了多个界面,且执行System.exit(0)的activity不是启动activity,则会导致再次打开应用时,显示的非启动界面,而是退出前未关闭的界面。

二、原因分析

Android退出应用程序会调用android.os.Process.killProcess(android.os.Process.myPid())或是System.exit(0),这只是针对第一个activity(也就是入口activity)时生效。如果有A,B,C三个activity,而想在B或C中退出应用,调用上面的方法,只会销毁当前activity返回上一个activity。

三、解决方法

写一个类ExitApplication,利用单例模式管理Activity,在每个Activity中将该Activity加入到ExitApplication中,在要退出的位置直接调用退出即可。

1、写类ExitApplication

2、添加Activity

3、调用退出方法

1、类ExitApplication

public class ExitApplication extends Application {

	private List<Activity> list = new ArrayList<Activity>();

	private static ExitApplication ea;

	private ExitApplication() {

	}

	public static ExitApplication getInstance() {
		if (null == ea) {
			ea = new ExitApplication();
		}
		return ea;
	}


	public void addActivity(Activity activity) {
		list.add(activity);
	}

	public void exit(Context context) {
		for (Activity activity : list) {
			if(activity!=null){
				activity.finish();
			}
		}
		System.exit(0);
	}
}
2、将每个activity中加入管理队列

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.guide);
    ExitApplication.getInstance().addActivity(this);
}
3、在要退出的地方执行

ExitApplication.getInstance().exit(activity);


你可能感兴趣的:(笔记93--完全退出应用程序)