`
jaychang
  • 浏览: 734755 次
  • 性别: Icon_minigender_1
  • 来自: 嘉兴
社区版块
存档分类
最新评论

Android下结束进程的方法

 
阅读更多


最近在做一个类似与任务管理器的东西,里面有个功能,可以通过这个管理器结束掉其他的进程。

  在Android 平 台下,结束进程的方法还是比较多的。首先指明,此处的“结束进程”,包含了结束自身进程和结束其他进程两个方面。通过查阅SDK文档和网上的一些资料,自 己找到一些结束进程的方法。在这里做一些归纳和总结,文章的部分信息有可能来自网上已有的文章和帖子,由于过了比较长时间,所以若发现本文与其他文章雷 同,请谅解。

一、结束一个活动Activity

  要主动的结束一个活动Activity,(先强调一下,是结束一个活动,而不是进程)众所周知,肯定是finish方法啦,这个就毋庸置疑了,而且这 个方法最后会调用Activity的生命周期函数onDestroy方法,结束当前的Activity,从任务栈中弹出当前的Activity,激活下一 个Activity。当然其他的finish系列方法,我们不在这里做详细讨论,有兴趣的同学可以自己查阅一下SDK 的文档。

二、强制结束当前的进程

  强行结束当前进程有两个方法。(呵呵,这里就是结束进程了)

  1、killProcess(int pid)

    例子:android.os.Process.killProcess(android.os.Process.myPid());

  对于这个方法,需要详细解释一下。在SDK的文档中,解释如下:

Kill the process with the given PID. Note that, though this API allows us to request to kill any process based on its PID, the kernel will still impose standard restrictions on which PIDs you are actually able to kill. Typically this means only the process running the caller's packages/application and any additional processes created by that app; packages sharing a common UID will also be able to kill each other's processes.

英语不好,不能准确翻译,所以希望大家自己理解,免得对大家造成误解。我个人对这句话的解释就是,这个方法使用是有条件的:

a、将被杀掉的进程 和 当前进程 处于同一个包或者应用程序中;

b、将被杀掉的进程 是由当前应用程序所创建的附加进程;

c、将被杀掉的进程 和 当前进程 共享了普通用户的UID。(这里的普通用户,是相对于Root权限的用户来说的)

  2、System.exit(int code)             例子:System.exit(0);

  该方法只能用于结束当前进程自身,个人觉得在程序遇到异常,无法正常执行时,可以通过这个方法强制退出。

  需要注意的是,这两个方法,会导致进程非正常退出,就是说,进程退出时不会去执行onPause、onStop和onDestroy方法,那么进程很有可能错过了保存数据的机会。因此,这两个方法最好使用在出现异常的时候!

三、结束另一个进程

  要通过一个进程去结束另一个进程。在之前的SDK版本中,一直使用方法restartPackage(packageName)方法,但是在Android 开发 文 档中介绍说,这个函数会导致一些问题( 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.),所以建议大家使用一个新的方法: 

  void killBackgroundProcesses(String packageName)

  由于这个方法没有返回值,所以我们也不知道我们的目标进程是否真的退出了。但是,我目前只发现了这个可以结束另一个进程的方法。

四、退出到主屏幕(记得是对当前进程的处理)

  这个方法,也是退出当前进程的一个方法。如果我们在进程中创建了很多的Activity,但是又不想关闭时去退出不在任务栈顶的Activity,那么就可以直接使用这个方法了。这个方法是通过查阅网上资料看到的。


按后退键退出 Android 程序


功能:当按下返回键时,就返回到主屏幕,并带有参数FLAG_ACTIVITY_CLEAR_TOP,会清理掉当前的活动。

  1.   @Override
  2. public boolean onKeyDown(int keyCode, KeyEvent event) {
  3. if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) { // 按下的如果是BACK,同时没有重复  
  4. Intent home = new Intent(Intent.ACTION_MAIN);  
  5. home.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);  
  6. home.addCategory(Intent.CATEGORY_HOME);  
  7. startActivity(home);  
  8. }
  9. return super.onKeyDown(keyCode, event);  
  10. }

此方法确实结束了当前进程,但是通过Android平台的App Manager工具去查看的话,使用2.3.3的模拟器,会发现刚刚被结束的进程会以Cached background Process的形式存在,并且模拟器给出了解释,说是为了下一次更快捷的启动这个进程。

分享到:
评论

相关推荐

    Android强行结束APP进程的方法.zip

    通过深入分析这些代码,我们可以更好地理解和学习如何在Android环境中控制应用的生命周期,以及如何在特定情况下结束APP进程。同时,这也提醒我们,作为开发者,我们应该始终关注应用的性能和用户体验,合理管理APP...

    Android结束进程的方法详解

    在Android平台上,结束进程是开发者在特定场景下可能需要的操作,比如优化资源使用或实现特定功能,例如任务管理器。本文将详细介绍如何在Android中结束进程,包括结束Activity、强制结束当前进程、结束另一个进程...

    Android2.2 结束进程

    本文将详细介绍在Android2.2版本中如何使用`forceStopPackage()`方法来结束进程,并探讨该方法与`restartPackage()`以及`killBackgroundProcesses()`等方法的区别。 #### 一、forceStopPackage()方法概述 `...

    安卓Android源码——强行结束APP进程的方法.zip

    3. **结束进程**:获取到PID后,可以调用`ActivityManager`的`forceStopPackage()`方法。这个方法会通过系统服务发送一个广播,指示系统停止该包名下的所有活动和服务,并终止其进程。源码中,这个方法会触发`...

    android上的进程管理软件

    默认情况下,它们在同一进程中运行,但可以通过设置不同的`android:process`属性来改变这一情况,实现组件间进程隔离。 三、Android进程优先级 Android将进程分为五种优先级:前台进程、可见进程、服务进程、后台...

    android 强行结束APP进程的方法.zip

    在Android系统中,强行结束应用程序进程通常涉及到对系统服务、活动管理器以及权限的理解。这里我们将深入探讨如何在Android环境中强制停止一个应用的进程,并理解这样做的潜在影响。 首先,我们要明白Android是一...

    Android源码_强行结束APP进程的方法

    5. **使用Intent和BroadcastReceiver**:虽然不是直接结束进程,但可以通过发送特定的Intent来触发应用的某些行为,如清除数据,然后在BroadcastReceiver中执行结束进程的操作。 需要注意的是,强行结束APP进程可能...

    基于android的强行结束APP进程的方法

    当用户退出应用时,Android通常不会立即结束进程,而是将其放入内存的后台状态,以便于快速重新启动。只有在系统资源紧张时,Android才会清理这些后台进程。 要强制结束一个APP进程,有以下几种方法: 1. **通过...

    Android进程结束杀掉子线程Demo

    http://blog.csdn.net/qq_28690547/article/details/50375997;关于demo的文章详解,有兴趣的童鞋可以看看,解决popupwindow/dialog的BadTokenException异常

    android安卓app如何彻底结束进程. 光调用finish()是结束不了程序的,程序中的线程依旧在后台运行.zip

    在Android系统中,当用户点击应用的返回按钮或者调用`finish()`方法时,当前活动(Activity)会被销毁,但这并不意味着整个应用程序进程被完全结束。实际上,Android系统为了优化性能,可能会保持应用的部分或全部...

    Android实现双进程守护

    然而,常规的服务运行在与应用相同的进程中,如果应用被系统清理或用户手动结束,服务也会随之停止。 双进程守护的核心思想是将关键服务分成两部分:一个运行在应用主进程,另一个运行在单独的守护进程中。这样,...

    Android-提高android服务进程的优先级

    Android系统根据各个应用组件所处的进程的重要性,将其分为多个等级,包括前台进程、可见进程、重要服务进程、后台进程和服务进程。优先级越高,系统在内存不足时越不容易杀掉该进程。服务进程属于这个序列中的中间...

    Android Task 进程与线程详解

    "Android Task 进程与线程详解" Android 中的 Task 概念是指一组以栈的模式聚集在一起的 Activity 组件集合,具有潜在的前后驱关联。Task 的主要作用是将组件之间的连接,从进程概念的细节中剥离出来,可以以一种...

    Android应用源码之强行结束APP进程的方法-IT计算机-毕业设计.zip

    1. 使用ActivityManager的stopAppSwitches()方法:这个方法是Android系统内部用来防止用户在特定情况下切换到其他应用,而非直接结束应用进程。在自定义ROM或系统级服务中可能适用,但在普通应用中并不推荐使用,...

    Android中进程之间通信的机制

    通过上述介绍可以看出,在Android中实现跨进程访问Activity以及数据的传递主要依赖于Intent及其相关的方法。无论是简单的数据传递还是复杂的双向通信,Intent都提供了灵活且强大的支持。理解这些机制对于构建复杂的...

    Android参考源码-强行结束APP进程的方法.zip

    在Android源码中,有多种方式可以实现强制结束APP进程,这些方法通常由系统或者开发者在特定场景下使用。本文将详细讲解如何通过Android的源码来实现这一操作。 首先,我们要理解Android应用的生命周期。每个...

    android守护进程示例

    在"非root下服务进程常驻"这个场景中,我们关注的是如何在不获取设备超级用户权限(root)的情况下,让Android服务在后台持续运行。Android系统对于后台服务的管理相当严格,特别是对于非前台服务,系统可能会因为...

    android 进程保活,

    本文将深入探讨Android进程保活的原理、方法以及实现策略。 首先,理解Android系统的进程管理机制是至关重要的。Android系统根据进程的重要性将其分为五种级别:前台进程、可见进程、服务进程、后台进程和空进程。...

Global site tag (gtag.js) - Google Analytics