android退出应用程序会调用android.os.Process.killProcess(android.os.Process.myPid())或是System.exit(0),这只是针对第一个Activity(也就是入口的Activity)时生效。如果有A,B,C三个Activity,而想在B或C中Activity退出,调用上面的方法,往往会销毁当前的Activity返回上一个Activity。当然也可以逐个返回上一个Activity,直到跳转到入口的Activity,最后退出应用程序。但这样比较麻烦,而且逐个返回的体验并不友好。
我常用的一种方法是自己定义一个类似Activity栈的东西(我用的是LinkedList<Activity>),把每一个Activity执行oncreate()的时候都加入到这个list,当要完全退出的时候就遍历这个list,循环删除。
代码如下:
package com.tarena.exit.model; import java.util.LinkedList; import android.app.Activity; import android.os.Bundle; public class BaseActivity extends Activity { public static LinkedList<Activity> allActivitys = new LinkedList<Activity>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); allActivitys.add(this); } @Override protected void onDestroy() { super.onDestroy(); allActivitys.remove(this); } public static void finishAll(){ for (Activity activity : allActivitys) { activity.finish(); } allActivitys.clear(); //这个主要是用来关闭进程的, 光把所有activity finish的话,进程是不会关闭的 System.exit(0); // android.os.Process.killProcess(android.os.Process.myPid()); } }
以后每写一个Activity就让它extends BaseActivity 即可。如果需要完全退出,调用 BaseActivity.finishAll();即可。
这个写法有个局限。因为java中类是单继承。如果一个Activity需要extends TabActivity ,那它就不能继承BaseActivity了。
下面看另一种方法:原理和之上的方法差不多。
package com.tarena.exit.model; import java.util.LinkedList; import java.util.List; import android.app.Activity; import android.app.Application; public class ExitApplication extends Application { private List<Activity> activityList = new LinkedList<Activity>(); private static ExitApplication instance; private ExitApplication() { // 单例模式中获取唯一的ExitApplication实例 } public static ExitApplication getInstance() { if (null == instance) { instance = new ExitApplication(); } return instance; } // 添加Activity到容器中 public void addActivity(Activity activity) { activityList.add(activity); } public void exit() { // 遍历所有Activity并finish() for (Activity activity : activityList) { activity.finish(); } System.exit(0); } }
参考原文:http://www.yoyong.com/archives/199
相关推荐
Android应用开发多个activity完全退出程序方法,亲测可用
Activity管理类,用于Activity管理和应用程序退出
Android 中应用程序Activity管理类:用于Activity管理和应用程序退出。.zip,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
实现完全退出应用程序功能,停止所有应用程序的Activity,停止Service
如果想退出Android程序,一般都是调用finish()、System.exit(0)android.os.Process.killProcess(android.os.Process.myPid())等方法来实现退出程序功能,可是在实际开发中,并不能达到完全退出应用程序的效果,...
如果有A,B,C三个Activity,而想在B或C中Activity退出,调用上面的方法,往往会销毁当前的Activity返回上一个Activity。当然也可以逐个返回上一个Activity,直到跳转到入口的Activity,最后退出应用程序。但这样比较...
本文实例讲述了Android完全退出应用程序的方法。分享给大家供大家参考。具体如下: 在Android中,如果想退出Android程序,一般都是调用finish()、System.exit(0)、android.os.Process.killProcess(android.os....
如果想退出Android程序,一般都是调用finish()、System.exit(0)、android.os.Process.killProcess(android.os.Process.myPid())等方法来实现退出程序功能,可是在实际开发中,并不能达到完全退出应用程序的效果,...
在退出时,遍历该list的activity,逐个关闭每一个activity,从而退出app 2 设置入口activity的启动模式android:launchMode="singleTask",重写onNewIntent方法, 在退出activity时,设置intent.setAction("exit_app...
有一种需要,我们在菜单项中点击退出应用程序,应用程序就退出,不需要回到MainActivity设计:有两个应用界面MainActivity和BActivity,以及用于程序的通用类ExitUtil ... } // 完全退出应用程序 p
NULL 博文链接:https://txlong-onz.iteye.com/blog/1021942
在Android应用程序UI架构中,还有一个重要的服务WindowManagerService,它负责统一管理协调系统中的所有窗口,例如管理窗口的大小、位置、打开和关闭等。这个PPT讲Android应用程序的Surface机制,阐述Activity、...
Android程序有很多Activity,比如说主窗口A,调用了子窗口B,如果在B中直接finish(), 接下里显示的是A。在B中如何关闭整个Android应用程序呢?本人总结了几种比较简单的实现方法
本文实例讲述了退出Android程序时清除所有activity的方法。分享给大家供大家参考,具体如下: 在一个项目中,要退出android程序,试了restartPackage、 killBackgroundProcesses 、通过异常并在Application的子类中...
本文实例讲述了Android编程之退出整个应用程序的方法。分享给大家供大家参考,具体如下: 我们在写android应用程序时,经常会遇到想退出当前Acitivity,或者直接退出应用程序.我之前的一般操作是按返回键,或者直接...
Android中知道界面是哪个activity,一次结束所有Activity退出程序
通过这种方式不能将应用程序完全杀死,并且他不会把当前应用应用的Activity的task任务栈清空 第二种方法:终止当前正在运行的Java虚拟机,导致程序终止 System.exit(0); 不会把自己的应用程序杀死 第三种方法:...
一键关闭android应用程序工具类 1.编写一个class继承Application public class AppClose extends Application { private List<Activity> mainActivity = new ArrayList<Activity>(); ....................
如何通过返回键,一次退出多个activity,直接退出应用程序。简单的思路就是:新建一个类,继承Application, 将所有创建的activivty 放到一个list中,在类中添加两个方法,一个addActivity(),用于添加activity到 list...