Android下终止进程的办法

 

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.

一种是运用过程的称呼,将PName换成对应的exe名字即可,比如notepad.exe

===============================优雅的分割线===============================

一种是采纳过程的ID号,将PID换成对应进程ID号即可

  1、killProcess(int pid)            
 例子:android.os.Process.killProcess(android.os.Process.myPid());

 

  在Android平台下,结束进程的措施仍然相比较多的。首先指明,此处的“截止进程”,包含了收尾自己进程和了结其他进程多少个地点。通过查阅SDK文档和网上的一部分材料,自己找到一些告终进程的法子。在这边做一些综合和小结,随笔的部分信息有可能来自网上已有些小说和帖子,由于过了相比较长日子,所以若觉察本文与任何著作雷同,请见谅。

 

二、强制截止目前的经过

https://docs.microsoft.com/zh-cn/windows-hardware/drivers/debugger/cdb-command-line-options

 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     }

 

  目前在做一个好像与职责管理器的事物,里面有个功效,可以经过那一个管理器截至掉其他的经过。

@ECHO OFF
TITLE 结束使用普通方法无法结束的进程
COLOR 0A
MODE con: COLS=62 LINES=22

:MENU
set tm1=%time:~0,2%
set tm2=%time:~3,2%
set tm3=%time:~6,2%
ECHO.  %date% %tm1%点%tm2%分%tm3%秒 
ECHO.   ========================================
ECHO.   请选择要进行的操作,然后按回车
ECHO.   ────────────────────
ECHO.  1    根据进程号PID结束进程
ECHO.  2    根据进程名称结束进程

ECHO.  0    退出
ECHO.
ECHO.请输入选择项目的序号:

set /p choose=
if "%choose%" equ "" goto MENU
if %choose%==1 goto killusingpid
if %choose%==2 goto killusingname
if %choose%==0 goto END

ECHO. 输入错误,请输入正确的项目序号:
goto MENU

:killusingpid
set choose=
ECHO.请输入进程号PID,然后按回车
set /p proid=
set /a i=0
:kpid
ntsd -c q -p %proid%
if %i% GEQ 10 ( ( echo 结束进程%proid%失败 ) & goto MENU )
set /a i=%i%+1
echo 结束进程%proid%第%i%次
tasklist | findstr /i %proid% && ( goto kpid )
echo 结束进程ID为%proid%的程序成功或进程ID:%proid%不存在
GOTO MENU

:killusingname
set choose=
ECHO.请输入进程的名称(比如notepad.exe),然后按回车
set /p proname=
set /a i=0
:kpname
ntsd -c q -pn %proname%
if %i% GEQ 10 ( ( echo 结束程序%proname%失败 ) & goto Menu )
set /a i=%i%+1
echo 结束程序%proname%第%i%次
tasklist | findstr /i %proname% && goto kpname
echo 结束程序%proname%成功或程序:%proname%未启动

GOTO MENU

:END
exit

  此办法确实停止了当前经过,但是透过Android平台的App
Manager工具去查看的话,使用2.3.3的模拟器,会发现刚刚被终止的历程会以Cached
background
Process的款型存在,并且模拟器给出了然释,说是为了下一次更迅捷的启航这些进程。

 使用ntsd程序 (倘使设置过VS,在VS的设置目录下,比如“C:\Program Files
(x86)\Debugging Tools for Windows
(x86)\ntsd.exe”,也得以在此地下载

【声明】本文系我原创,转载请注解作品出处:http://www.cnblogs.com/crazypebble/archive/2011/04/05/2006213.html  
博客园http://www.cnblogs.com

ntsd -c q -p PID
ntsd -c q -pn PName

  要因而一个历程去得了另一个历程。在事先的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.
),所以提议我们利用一个新的措施: 

为了有利于,写了个批处理,将该批处理和ntsd放在一块儿,使用时实施批处理,选用相应的法子,并输入参数即可。

阿拉伯语不佳,不可能纯粹翻译,所以希望我们温馨理解,免得对我们造成误会。我个人对这句话的解释就是,这么些法子运用是有规则的:

参考:

b、将被杀掉的长河
是由方今应用程序所开创的增大进程;

 

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

二种办法

  该情势只可以用来截止近期过程本身,个人认为在程序曰镪特别,不能正常执行时,可以透过这个艺术强制退出。

效果:当按下再次来到键时,就回去到主屏幕,并涵盖参数FLAG_ACTIVITY_CLEAR_TOP,会清理掉当前的移位。

  这么些格局,也是脱离当前过程的一个方法。假诺大家在经过中创立了成百上千的Activity,可是又不想关闭时去退出不在任务栈顶的Activity,那么就足以一直运用这一个主意了。那个主意是通过查看网上资料看到的。在此先感谢
追梦人
了(他的博客地址:http://www.cnblogs.com/yunfei181/archive/2011/01/24/1943128.html,欢迎大家去探视她的博客)。

  要主动的终结一个活动Activity,(先强调一下,是终结一个平移,而不是经过)众所周知,肯定是finish方法啦,那一个就无须置疑了,而且以此法子最终会调用Activity的生命周期函数onDestroy方法,截至近期的Activity,从任务栈中弹出当前的Activity,激活下一个Activity。当然其他的finish体系方法,我们不在这里做详细钻探,有趣味的同校可以团结查阅一下SDK
的文档。

  由于这一个办法没有再次来到值,所以大家也不知晓我们的对象经过是否真正退出了。可是,我眼前只发现了那多少个可以终结另一个经过的章程。

三、截至另一个过程

  需要专注的是,这七个点子,会导致进程非正常退出,就是说,进程退出时不会去执行onPause、onStop和onDestroy方法,那么进程很有可能失去了保留数据的空子。因而,这五个艺术最好应用在出现非凡的时候!

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

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

  强行终止近年来过程有四个措施。(呵呵,那里就是终结进程了)

一、为止一个活动Activity

四、退出到主屏幕(记得是对现阶段进程的处理)

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

  void killBackgroundProcesses)(String packageName)

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图