终止日常方法无法收场之过程

 使用ntsd程序 (如果安了VS,在VS的安目录下,比如“C:\Program Files
(x86)\Debugging Tools for Windows
(x86)\ntsd.exe”,也足以以此间下载)

  最近当开一个像样与任务管理器的物,里面有只功能,可以经是管理器结束掉其他的历程。

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

  以Android平台下,结束进程的点子还是比多的。首先指明,此处的“结束进程”,包含了收尾自己进程与了结其他进程两个点。通过翻SDK文档和网上的片素材,自己找到有收进程的计。在此处开片概括和总,文章的一对信息有或来网上一度部分文章与帖子,由于过了较较长时间,所以若觉察本文与其余文章雷同,请见谅。

有数种方法

平等、结束一个活动Activity

平种植是使过程的ID号,将PID换成对应进程ID号即可

  要积极的收尾一个活动Activity,(先强调一下,是了一个倒,而非是过程)众所周知,肯定是finish方法啦,这个就是不要置疑了,而且是法子最后会调用Activity的生命周期函数onDestroy方法,结束目前的Activity,从任务栈中弹出当前之Activity,激活下一个Activity。当然其他的finish系列方法,我们无以此间召开详细座谈,有趣味的同学可以协调查阅一下SDK
的文档。

同种是利用过程的名目,将PName换成对应的exe名字即可,比如notepad.exe

亚、强制结束目前之过程

以好,写了单批处理,将该批处理及ntsd放在一块儿,使用时实行批处理,选择相应之方法,并输入参数即可。

  强行终止时历程来少数单艺术。(呵呵,这里就是是了进程了)

@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

  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、将为百般掉的过程
是出于时应用程序所创建的附加进程;

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

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,那么就可一直运用这个点子了。这个主意是经过查看网上资料看到的。在此先感谢
追梦人
了(他的博客地址:http://www.cnblogs.com/yunfei181/archive/2011/01/24/1943128.html,欢迎大家去看看外的博客)。

职能:当随下回到回键时,就归到主屏幕,并蕴藏参数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的款型是,并且模拟器给起了解释,说是为了下同样不行又高效的启动这个进程。

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

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

发表评论

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

网站地图xml地图