安卓退出已调用多个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()。
好了,整个应用就可以正常的退出了。简单易懂。
- 安卓退出已调用多个Activity的应用
- 如何安全退出已调用多个Activity的Application?
- 如何安全退出已调用多个Activity的Application
- 如何安全退出已调用多个Activity的Application?
- 如何安全退出已调用多个Activity的Application?
- 如何安全退出已调用多个Activity的Application?
- 如何安全退出已调用多个Activity的Application?
- 如何安全退出已调用多个Activity的Application?
- 如何安全退出已调用多个Activity的Application?
- 如何安全退出已调用多个Activity的Application?
- 如何安全退出已调用多个Activity的Application?
- 安全退出已调用多个Activity的Application
- 如何安全退出已调用多个Activity的Application?
- 如何安全退出已调用多个Activity的Application?
- 如何安全退出已调用多个Activity的Application?
- 如何安全退出已调用多个Activity的Application?
- 安全退出已调用多个activity的application
- 如何安全退出已调用多个Activity的Application?
- 史上最详细的Log4j配置
- Linux下的jdk安装
- centos7防火墙firewalld守护进程
- 详解数据库范式
- git到一个非空项目上
- 安卓退出已调用多个Activity的应用
- android中Application类
- Android事件总线 Otto框架使用
- UVA 10129 Play on Words
- hdoj1711(KMP模板题)Number Sequence
- 【codeforces】601A—— The Two Routes
- uva 10641 dp
- UVA-11809
- jdk安装 系统找不到文件C:\ProgramData\Oracle\Java\javapath\java.exe