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

来源:互联网 发布:安卓游戏编程教程 编辑:程序博客网 时间:2024/06/16 04:57

如题:最近遇到一情景,在当前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()。
  
好了,整个应用就可以正常的退出了。简单易懂。

0 0
原创粉丝点击