如何退出已打开多个Activity的应用?
2019-1-25 liuyingcong 安卓开发
在退出应用的时候,应用内可能打开了多个activity,调用finish()只能关闭当前activity,调用System.exit()或Process.killProcess(Process.myPid())短暂退出应用后,程序会重启,也不能达到目的。
下面介绍两种退出已打开多个activity的应用:
方法一
当然可以发广播,在其他开启的activity中注册广播接收者:
IntentFilter filter = new IntentFilter("com.example.demo.finish"); receiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { WelcomeActivity.this.finish(); } }; registerReceiver(receiver, filter);在当前activity中退出应用的逻辑中发送广播:
Intent intent = new Intent("com.example.demo.finish"); sendBroadcast(intent); System.exit(0);
这样就能退出应用了。
方法二
下面介绍第二种方法,思路是把开启的activity存储在一个容器里,在退出应用的时候,遍历容器,挨个调用finish()方法。
public class MyApplication extends Application { private List<Activity> activityList = new LinkedList<Activity>(); private static MyApplication instance; //单例模式中获取唯一的MyApplication实例 public static MyApplication getInstance() { if(null == instance) { instance = new MyApplication(); } return instance; } //添加Activity到容器中 public void addActivity(Activity activity) { activityList.add(activity); } //遍历所有Activity并finish public void exit() { for(Activity activity:activityList) { activity.finish(); } System.exit(0); } }
在每一个Activity中的onCreate方法里添加该Activity到MyApplication对象实例容器中
MyApplication.getInstance().addActivity(this);
在需要结束所有Activity的时候调用exit方法
MyApplication.getInstance().exit();
注意使用这种方法,一定不要把所有activity都存在容器中,因为这样会造成内存泄漏,只把退出应用时后台还在开启的activity存在里面即可。