本文已参与「新人创作礼」活动,一起开启掘金创作之路。
设计背景及解决方案
- Android程序有很多Activity,比如说主窗口A,调用了子窗口B,如果在B中直接finish(), 接下里显示的是A。在B中如何关闭整个Android应用程序呢?
- 对于单一Activity的应用来说,退出很简单,直接finish()即可。
- 当然,也可以采用类似killProcess()和System.exit()这样的方法。
- 对于多个activity
- 1、记录打开的Activity:每打开一个Activity,就记录下来。在需要退出时,关闭每一个Activity即可。
- 2、发送特定广播:在需要结束应用时,发送一个特定的广播,每个Activity收到广播后,关闭即可
- 3、递归退出:在打开新的Activity时使用startActivityForResult,然后自己加标志,在onActivityResult中处理,递归关闭。当然,为了编程方便,最好是定义一个Activity基类,处理这些共通问题。
优点
- 实现简单,动作迅速,逻辑清晰
exit.java
- 思路采用list保存activity实例,把每个activity记住,然后逐一干掉
- 自己写一个 exit.java 通过 list 将多个 activity 添加进来,然后实现批量退出
public class exit extends Application {
private List<Activity> list = new ArrayList<Activity>();
private static exit ex;
private exit() {
}
public static exit getInstance() {
if (null == ex) {
ex = new exit();
}
return ex;
}
public void addActivity(Activity activity) {
list.add(activity);
}
public void exit(Context context) {
for (Activity activity : list) {
//销毁所有的activity
activity.finish();
}
System.exit(0);
}
}
- 在每个需要退出的 activity 里面的 onCreate 方法里加上 exit.getInstance().addActivity(this);即可退出APP(多个activity界面)
- 简而言之,通过单例模式把每个Activity 的引用添加到一个全局链表中,每次退出程序调用System.exit(0)时,先调用链表中Activity 的finish方法
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.list);
exit.getInstance().addActivity(this);
}