Android结束进程,关闭程序的方法,经过这几天的调研,发现了Android结束一个进程的方法

即采用下面这个类

void android.app.ActivityManager.restartPackage(StringpackageName)

public void restartPackage(StringpackageName)

Since:API Level 3

Have the system perform a force stop of everything associated with the given application package. All processes that share its uid will be killed, all services it has running stopped, all activities removed, etc. In addition, aACTION_PACKAGE_RESTARTEDbroadcast will be sent, so that any of its registered alarms can be stopped, notifications removed, etc.

You must hold the permissionRESTART_PACKAGESto be able to call this method.

Parameters

packageName

The name of the package to be stopped.

使用这个类的具体源代码

Java代码

[java] view plain copy
  1. finalActivityManageram=(ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
  2. am.restartPackage(getPackageName());

再加上uses-permission

Xml代码

[xhtml] view plain copy
  1. <uses-permissionandroid:name="android.permission.RESTART_PACKAGES"></uses-permission>

结束进程还有android.os.Process.killProcess(pid)只能终止本程序的进程,无法终止其它的

public static final voidkillProcess(int pid)

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.

public voidfinish()

Call this when your activity is done and should be closed. The ActivityResult is propagated back to whoever launched you via onActivityResult().

这是结束当前activity的方法

在android2.2版本之后则不能再使用restartPackage()方法,而应该使用killBackgroundProcesses()方法

manager.killBackgroundProcesses(getPackageName());

[c-sharp] view plain copy
  1. ActivityManagermanager=(ActivityManager)getSystemService(ACTIVITY_SERVICE);
  2. manager.killBackgroundProcesses(getPackageName());

加入权限

[c-sharp] view plain copy
  1. //需要在xml中加入权限声明
  2. <uses-permissionandroid:name="android.permission.KILL_BACKGROUND_PROCESSES"/>


另外,在android2.2以后,如果服务在ondestroy里加上了start自己,用kill backgroudprocess通常无法结束自己。

还有一种最新发现的方法,利用反射调用forceStopPackage来结束进程

代码如下

[c-sharp] view plain copy
  1. MethodforceStopPackage=am.getClass().getDeclaredMethod("forceStopPackage",String.class);
  2. forceStopPackage.setAccessible(true);
  3. forceStopPackage.invoke(am,yourpkgname);

需要在manifest里加上shareduid定义

[c-sharp] view plain copy
  1. android:sharedUserId="android.uid.system"

另外加上权限

[c-sharp] view plain copy
  1. <uses-permissionandroid:name="android.permission.FORCE_STOP_PACKAGES"></uses-permission>

并且采用系统platform签名


因为需要用FORCE_STOP_PACKAGES权限,该权限只赋予系统签名级程序

即可实现强制停止指定程序

还有一种方法 利用linux的kill -9命令

更多相关文章

  1. 浅谈Java中Collections.sort对List排序的两种方法
  2. Python list sort方法的具体使用
  3. python list.sort()根据多个关键字排序的方法实现
  4. Android(安卓)阻断adb install
  5. eclipse中安装android ADT插件及无法下载ADT解决方法
  6. Android(安卓)Camera调用过程分析
  7. android 实现代码关机
  8. Android(安卓)BaseWebLoad组件使用及与js方法互调
  9. Android和H5混合开发(一)

随机推荐

  1. gitHub上边android studio开发的开源项目
  2. Android(安卓)仿ios下拉放大图片过度拉伸
  3. Android下用gdb进行系统级源码调试
  4. Android生命周期组件Lifecycle使用详解
  5. Android(安卓)开发中遇到的Error:Executi
  6. Android(安卓)使用动态加载框架DL进行插
  7. Android(安卓)Support Annotations 使用
  8. Android设置输入法
  9. Android进阶之数据存储+Preferences
  10. Android(安卓)Multimedia框架总结(二十七)M