安卓退出已调用多个Activity的应用

    xiaoxiao2026-08-31  14

    如题:最近遇到一情景,在当前activity按BACK键退出整个应用,考虑栈中会有多个activity,所以简单的finish()是无法实现此需求的。   接下来,结合之前看到的几个框架和应用源码,总结或想到如下几个方案:   1.在启动每个activity时记录在一个列表中,当需要退出应用的时候逐个判断activity是否已经onDestroy,如果没有则调用finish()。这个方法最简单,本文例子也是选择这个方案。   2.异常强制退出:虽然可以实现,但验证会弹出Force Close的对话框。需要重写并继承Application基类来屏蔽之。   3.可以利用activity在finish的时候返回给上一个activity的“结果”进行递归退出所有activity。相关函数为:startActivityForResult与onActivityResult。但缺点是当中间某个activity被系统回收但首activity未被回收,不能实现退出应用的要求。(即限制条件是所有的不可见activity都未被系统回收)   4.发送广播可以实现。不过需要在每个activity中注册广播接收者和在必要的事件中发送广播。麻烦。   5.直接kill进程。不建议。   接下来上1方案的代码:   1.编写基础BaseAcitivity以及记录容器类ActivityCollector以实现记录所有activity。   

    public class ActivityCollector{ public static List<Activity> activities=new ArrayList<Activity>(); public static void addActivity(Activity activity){ activities.add(activity); } public static void removeActivity(Activity activity){ activities.remove(activity); } public static void finishAllActivities(){ for(Activity activity:activities){ if(!activity.isFinishing()){ activity.finish(); } } } }

    public class BaseActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); ActivityCollector.addActivity(this); } @Override protected void onDestroy() { super.onDestroy(); ActivityCollector.removeActivity(this); }; }

      2.所有activity都继承BaseActivity,并实现。   

    public class ADPageActivity extends BaseActivity { ... }

      3.当需要退出整个应用时调用ActivityCollector.finishAllActivities()。    好了,整个应用就可以正常的退出了。简单易懂。

    转载请注明原文地址: https://ju.6miu.com/read-1311767.html
    最新回复(0)