1、自己结束自己 this.finish();
2、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权限的用户来说的)
3、System.exit(int code)
例子:System.exit(0);
该方法只能用于结束当前进程自身,个人觉得在程序遇到异常,无法正常执行时,可以通过这个方法强制退出。
需要注意的是,这两个方法,会导致进程非正常退出,就是说,进程退出时不会去执行onPause、onStop和onDestroy方法,那么进程很有可能错过了保存数据的机会。因此,这两个方法最好使用在出现异常的时候!
4、killBackgroundProcesses(String packageName)
要通过一个进程去结束另一个进程。在之前的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.),所以建议大家使用一个新的方法:
由于这个方法没有返回值,所以我们也不知道我们的目标进程是否真的退出了。但是,我目前只发现了这个可以结束另一个进程的方法。此方法需要权限:
<uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" />
5、利用反射调用forceStopPackage来结束进程
Method forceStopPackage = am.getClass().getDeclaredMethod("forceStopPackage", String.class);
forceStopPackage.setAccessible(true);
forceStopPackage.invoke(am, yourpkgname);
注意:
需要在manifest里加上shareduid定义:android:sharedUserId="android.uid.system"
需要在manifest里加上权限:<uses-permission android:name="android.permission.FORCE_STOP_PACKAGES"></uses-permission>
需要采用系统platform签名,因为需要用FORCE_STOP_PACKAGES权限,该权限只赋予系统签名级程序,然后经编译环境重新编译,即可实现强制停止指定程序(本人亲自验证可行)
6、killall -HUP packageName || kill -9 pid
String cmd="killall -HUP com.android.test";
try {
Process process = Runtime.getRuntime().exec(cmd);
BufferedReader in = new BufferedReader(new InputStreamReader(
process.getInputStream()));
String line = null;
while ((line = in.readLine()) != null) {
System.out.println("exec shell: == " + line);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
此方法理论上可行,但是应该需要系统级或底层的协助
进程管理可参考:
http://www.cnblogs.com/crazypebble/archive/2011/04/09/2010196.html
分享到:
相关推荐
在Android平台上,结束进程是开发者在特定场景下可能需要的操作,比如优化资源使用或实现特定功能,例如任务管理器。本文将详细介绍如何在Android中结束进程,包括结束Activity、强制结束当前进程、结束另一个进程...
### Android2.2 结束进程:forceStopPackage() 在Android开发过程中,对于应用程序的管理和控制是非常重要的一个环节。本文将详细介绍在Android2.2版本中如何使用`forceStopPackage()`方法来结束进程,并探讨该方法...
在Android系统中,结束一个应用程序进程并非简单的点击“退出”按钮即可实现,因为Android系统会自动管理应用程序的生命周期。然而,有时开发者或者用户可能需要强制结束一个APP进程,例如进行性能测试、解决卡顿...
3. **结束进程**:获取到PID后,可以调用`ActivityManager`的`forceStopPackage()`方法。这个方法会通过系统服务发送一个广播,指示系统停止该包名下的所有活动和服务,并终止其进程。源码中,这个方法会触发`...
http://blog.csdn.net/qq_28690547/article/details/50375997;关于demo的文章详解,有兴趣的童鞋可以看看,解决popupwindow/dialog的BadTokenException异常
### Android中进程之间通信的机制 #### 跨进程访问Activity 在Android开发中,进程间的通信是一项非常重要的技术。特别是当需要与不同应用程序中的Activity进行交互时,掌握正确的通信方式至关重要。本文将深入...
"Android Task 进程与线程详解" Android 中的 Task 概念是指一组以栈的模式聚集在一起的 Activity 组件集合,具有潜在的前后驱关联。Task 的主要作用是将组件之间的连接,从进程概念的细节中剥离出来,可以以一种...
Android系统根据各个应用组件所处的进程的重要性,将其分为多个等级,包括前台进程、可见进程、重要服务进程、后台进程和服务进程。优先级越高,系统在内存不足时越不容易杀掉该进程。服务进程属于这个序列中的中间...
当系统资源紧张时,Android会根据进程的重要性和当前活动状态决定哪些进程应该被优先保留或结束。 二、Activity与Service的进程关联 Android应用程序通常由多个组件构成,如Activity(活动)、Service(服务)等。...
在Android系统中,当用户点击应用的返回按钮或者调用`finish()`方法时,当前活动(Activity)会被销毁,但这并不意味着整个应用程序进程被完全结束。实际上,Android系统为了优化性能,可能会保持应用的部分或全部...
然而,常规的服务运行在与应用相同的进程中,如果应用被系统清理或用户手动结束,服务也会随之停止。 双进程守护的核心思想是将关键服务分成两部分:一个运行在应用主进程,另一个运行在单独的守护进程中。这样,...
### Android adb 进程端口处理命令 在Android开发过程中,`adb`(Android Debug Bridge)作为连接Android设备与电脑的重要工具,在调试、部署应用程序时扮演着关键角色。本文将详细解析与`adb`进程及端口管理相关的...
在Android系统中,一个守护进程(Daemon)是指在后台运行且独立于用户界面的程序,通常用于提供系统级服务。由于Android系统的设计,一般应用程序在用户退出后会被系统自动清理,无法实现常驻运行。然而,有时候...
在决定结束进程时,通常不建议终止前台或重要服务,以免影响用户体验。开发者需要根据`RunningAppProcessInfo`的`importance`字段来判断。 5. **结束进程**: 使用`ActivityManager`的`killBackgroundProcesses()`...
在Android中,服务通常在一个进程中运行,当这个进程被杀死时,服务也会随之结束。双进程监控的核心思想是将服务放在两个不同的进程中,一个主进程负责启动服务,另一个辅助进程则持续监控主进程的状态。如果主进程...
在Android系统中,进程保活是一项重要的技术,其目的是确保应用程序即使在后台运行也能保持活动状态,不轻易被系统为了优化资源而终止。这在一些需要持续后台服务的应用,如音乐播放器、导航软件或者即时通讯应用中...
系统通常不会结束这类进程。 - **服务进程**:执行用户关心任务的Service,即使与用户界面无关,系统也尽量保留。 - **后台进程**:不影响用户体验的进程,如已停止的Activity,系统会根据内存需求随时终止。 - **空...
5. **使用Intent和BroadcastReceiver**:虽然不是直接结束进程,但可以通过发送特定的Intent来触发应用的某些行为,如清除数据,然后在BroadcastReceiver中执行结束进程的操作。 需要注意的是,强行结束APP进程可能...
当用户退出应用时,Android通常不会立即结束进程,而是将其放入内存的后台状态,以便于快速重新启动。只有在系统资源紧张时,Android才会清理这些后台进程。 要强制结束一个APP进程,有以下几种方法: 1. **通过...