相信能看到这里的人,都已经是找过很多文章了,先说需求,A-->B-->C 这样打开页面,在C的时候关闭finish()可以关闭D页面,但显示B页面,需求就是 当在C页面关闭,可以把ABC几个页面都关闭了。简单来说,整个程序的退出。
我也把我看过的文章和做过的经验总结一下吧:
1: Android2.1以下的程序,可以用以下方法完全退出
ActivityManager am = (ActivityManager)getSystemService(ACTIVITY_SERVICE);
am.restartPackage(getPackageName());
但需要在AndroidManifest.xml声明权限
<uses-permission android:name="android.permission.RESTART_PACKAGES"/>
2:
Android2.2API restartPackage的描述 写道
This method is deprecated.
This is now just a wrapper for killBackgroundProcesses(String); the previous behavior here is no longer available to applications because it allows them to break other applications by removing their alarms, stopping their services, etc.
在2.2里面推出新的方法 killBackgroundProcesses(String packageName). 此函数的API Level最小为8,方法如下
ActivityManager am = (ActivityManager)getSystemService(ACTIVITY_SERVICE);
am.killBackgroundProcesses(getPackageName());
需要在AndroidManifest.xml里声明权限
<uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES"/>
3:但不知道为什么,我在2.2中 killBackgroundProcesses的方法也是无效的。经过许多文章的阅读,找到了以下的方法
A页面代码如下:
Intent intent = new Intent();
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);//关键!
intent.setClass(A.this, B.class);
startActivity(intent);
B页面代码如下:
Intent intent = new Intent();
intent.setClass(B.this, C.class);
startActivity(intent);
C页面代码如下:
Intent startMain = new Intent(Intent.ACTION_MAIN);
startMain.addCategory(Intent.CATEGORY_HOME);//必须,没有这个你可以看看效果~
startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//可无
startActivity(startMain);
System.exit(0);//关键,如果换成 finish()效果表面一样,但实际并无关进程
关键是,A页面(起始页面) C页面(关闭页面) 的设置
其实关于A页面的设置 很多文章都有说,但在C页面这里,却很少了。
通过已上三步,基本能关掉所有进程,因为在任务管理器没有了,如果最后的System.exit(0)换成finish()任务管理器里面仍显示该项目正在运行。
但这里还有一个bug的,就是关闭之后,再次启动程序,会去到B页面。。。 哈哈,这里的解决方法就很多了,根据大家的业务需求去做吧。
在Android做应用层,如果你想做好,想把体验做得更贴切,其实也是很复杂的事情。
希望大家看到这个文章能觉得有用,谢谢已阅者!
分享到:
相关推荐
1、新建一个 ExitApplication 类继承Application 2、在你要退出的activity Oncreate方法中加入...3、在你当前要完全退出程序的activity中覆盖onKeyDown方法. 4、当你点击手机的返回按钮时将提示:是否退出系统。
因此,我们需要一种策略来确保所有Activity都被正确关闭,以便完全退出程序。 在Android中,Activity的启动和管理是通过Activity栈(也称为任务栈)来实现的。每次启动一个新Activity,它都会被压入栈顶,而当用户...
在Android应用开发中,完全退出程序意味着结束所有与应用程序相关的活动(Activity)并释放系统资源。用户通常期望点击“退出”按钮后,整个应用程序能够完全关闭,而不是仅仅停留在后台运行。下面我们将详细讨论...
当用户完成某项任务或者希望完全退出应用时,通常会希望看到一个确认提示,并在确认后关闭所有已打开的Activity。 首先,我们来理解Activity的生命周期。每个Activity都有一个生命周期,包括创建(onCreate())、...
默认情况下,Android系统会根据需要管理这些Activity,但开发者可以通过控制Activity的生命周期来实现完全退出应用。 在描述中提到的方法通常涉及到结束所有活动的栈。这可以通过调用`finish()`方法来实现,此方法...
有时,开发者可能需要提供一个功能,允许用户完全退出应用,关闭所有已打开的`Activity`。这就是"退出所有的Activity"这个demo所要解决的问题。 在这个示例中,开发者创建了一个方法来管理并逐一销毁应用中的所有`...
要实现完全退出应用,一种常见方法是采用单例模式配合Activity管理。以下是一个具体的实践案例: 1. 创建一个名为`MyApplication`的自定义`Application`类,它将作为Activity管理对象。在这个类中,我们可以维护一...
若要实现应用完全退出,我们需要在合适的时候调用finish()方法,以结束当前Activity,并确保所有活动的Activity都被关闭。 1. **完全退出应用**:当用户按下后退键或者在代码中调用finish()时,当前Activity会被...
总结来说,完全退出Android应用不仅涉及到Activity的关闭,还需要处理Service、BroadcastReceiver和其他可能存在的后台组件。通过结合使用`System.exit(0)`、`finish()`、`ActivityManager`、`BroadcastReceiver`...
在Android开发中,有时我们需要实现一个功能,使得用户在点击某个按钮后,应用程序能够完全退出,包括清除所有活动栈中的Activity以及停止后台服务。这里我们将深入探讨如何利用`Application`类来实现这一功能,以及...
当需要退出应用程序时,则调用`ExitApplication.getInstance().exit()`,该方法会遍历所有已添加的Activity并调用它们的`finish()`方法,确保每个Activity都被正确关闭,从而实现应用程序的完全退出。 #### 实现...
以下是一个关于如何实现Android完全退出应用的详细知识讲解。 首先,我们需要理解Android应用的基本结构。在Android中,一个应用通常由多个Activity组成,每个Activity代表一个用户界面。当用户通过点击按钮或其他...
在Android应用开发中,完全退出一个程序并非简单地关闭当前活动(Activity)。特别是当应用程序包含多个Activity时,单纯地从栈顶Activity退出并不能确保整个应用的完全关闭,因为其他Activity可能仍在后台运行。本...
在Android开发中,有时我们需要实现一个功能,即用户点击退出按钮后,应用程序能够完全退出,关闭所有Activity。这个过程被称为完全退出程序。通常,Android系统通过Activity栈来管理应用的生命周期,当用户按下Back...
在AndroidManifest.xml中,可以配置应用的行为,例如,设置`android:noHistory="true"`可以使Activity在离开后不再出现在历史记录中,但这并不意味着应用完全退出。 总之,完全退出Android程序涉及对应用生命周期...
在安卓应用开发中,"完全退出程序"是一个常见的需求,特别是在用户希望彻底关闭应用程序,清除所有活动和后台进程时。本资源包包含了安卓项目源码、相关论文以及参考资料,非常适合进行毕业设计、课程设计或者安卓...
在Android中,如果想退出Android程序,一般都是调用finish()、System.exit(0)android.os.Process.killProcess(android.os.Process.myPid())等方法来实现退出程序功能,可是在实际开发中,并不能达到完全退出应用程序...
要实现完全退出应用,一种常见方法是重写Activity的onBackPressed()方法,这会在用户按下后退键时被调用。在该方法中,可以使用finishAffinity()或System.exit(0)来关闭所有Activity并结束进程。 ```java @Override...
在Activity中,我们可以调用finish()方法来关闭当前Activity,但这并不意味着应用程序完全退出,因为其他Activity或者服务可能仍然在运行。 接下来,我们要利用Application的全局特性。Application类是所有Activity...