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
相关推荐
在用户想要退出应用时,简单地结束当前Activity并不足以完全关闭应用,因为后台可能还有其他Activity处于栈顶等待恢复。因此,我们需要一种策略来确保所有Activity都被正确关闭,以便完全退出程序。 在Android中,...
Activity管理类,用于Activity管理和应用程序退出
在Android应用开发中,完全退出程序意味着结束所有与应用程序相关的活动(Activity)并释放系统资源。用户通常期望点击“退出”按钮后,整个应用程序能够完全关闭,而不是仅仅停留在后台运行。下面我们将详细讨论...
本资源包主要关注Android中的Activity管理和应用程序的退出操作。 首先,ActivityCollector是一个可能包含在压缩包中的类,它的作用可能是收集并管理多个Activity实例。在Android开发中,我们有时需要跟踪或控制...
当用户完成某项任务或者希望完全退出应用时,通常会希望看到一个确认提示,并在确认后关闭所有已打开的Activity。 首先,我们来理解Activity的生命周期。每个Activity都有一个生命周期,包括创建(onCreate())、...
在Android的默认行为中,用户可以通过点击后退键或者调用`finish()`方法来关闭单个Activity,但这并不意味着整个应用程序会完全退出,特别是当有多个Activity在栈中时。下面将详细介绍如何实现从任何Activity完全...
在Android开发中,退出应用程序是一个常见的需求,尤其是在某些特定的应用场景下,用户可能希望完全关闭应用,而不是简单地退回到后台。本示例"退出Android应用程序Demo"将讲解如何实现这个功能,涉及到的关键知识点...
在Android应用程序开发中,Activity是用户界面的基本单元,它代表了应用中的一个屏幕或操作流程。多Activity跳转是常见的应用场景,例如用户在登录、注册、浏览商品等不同页面之间切换。然而,当用户完成一系列操作...
如果在这2秒内再次按下返回键,那么我们就认为用户确实想要退出应用,此时执行finish()方法来结束当前Activity,从而退出应用程序。 以下是一个简单的ExitActivity示例代码: ```java public class ExitActivity ...
当需要退出应用程序时,则调用`ExitApplication.getInstance().exit()`,该方法会遍历所有已添加的Activity并调用它们的`finish()`方法,确保每个Activity都被正确关闭,从而实现应用程序的完全退出。 #### 实现...
2. **强制退出**:要完全退出应用程序,开发者通常会在主Activity中添加一个菜单项或按钮,触发`finishAffinity()`方法。此方法会结束当前Activity及其所有父Activity,使用户回到最近的非该应用的Activity。然而,...
在退出应用时,可以使用一个特殊的Intent启动系统设置,让用户选择关闭应用。例如,可以创建一个BroadcastReceiver监听特定的Intent,并在接收到Intent时执行退出操作。 5. **后台服务与广播接收器** 如果应用包含...
在Android应用程序开发中,Intent是连接各个组件(如Activity、Service等)的关键桥梁,主要用于启动和关闭Activity。Intent不仅能够启动一个新的Activity,还能在Activity之间传递数据,实现应用内部或应用间的交互...
如果想退出Android程序,一般都是调用finish()、System.exit(0)android.os.Process.killProcess(android.os.Process.myPid())等方法来实现退出程序功能,可是在实际开发中,并不能达到完全退出应用程序的效果,...
在Android开发中,有时候我们需要实现一种功能:当用户执行特定操作时,比如点击退出按钮,能够一次性关闭所有打开的Activity并退出应用程序。这种方式在一些需要快速释放资源、彻底结束程序的应用场景中较为常见。...
在Android开发中,完全退出应用程序通常指的是关闭所有与应用相关的活动(Activities)和释放系统资源。这不仅是用户体验的一部分,也可能在某些情况下是必要的,比如在内存紧张时优化系统性能。以下是一个关于如何...
在Android应用开发中,完全退出程序是一个常见的需求,特别是在用户希望彻底关闭应用并释放系统资源时。本资料包“Android应用源码完全退出程序的方法.zip”聚焦于如何在Android应用程序中实现这一功能。以下是关于...
然而,有时开发者或用户可能希望应用程序能够完全退出,以防止某些资源泄露或内存占用过高。本文将探讨如何在Android应用中实现完全退出,以及解决引用Context未释放导致的OOM(Out of Memory)问题。 首先,理解...
在Android系统中,由于其设计原则,通常不鼓励开发者实现一键退出应用的功能,因为系统会自动管理应用程序的内存资源。然而,用户有时可能有需求快速退出应用,这就涉及到如何在Android程序中实现这一功能。本篇文章...