Android下终止进程的章程

 

  目前在做一个接近与职责管理器的东西,里面有个效益,能够通过那多少个管理器为止掉其他的经过。

 

二、强制停止目前的长河

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

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

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

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

@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

  这多少个法子,也是退出当前进程的一个方法。如果我们在经过中创制了诸多的Activity,不过又不想关闭时去退出不在任务栈顶的Activity,那么就足以从来运用这一个艺术了。这么些艺术是透过查看网上资料看到的。在此先感谢
追梦人
了(他的博客地址:http://www.cnblogs.com/yunfei181/archive/2011/01/24/1943128.html,欢迎我们去探访他的博客)。

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

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

 

b、将被杀掉的进程
是由近日应用程序所创办的叠加进程;

 

  void killBackgroundProcessesmanbetx手机网页版,)(String packageName)

参考:

效用:当按下重临键时,就重返到主屏幕,并含有参数FLAG_ACTIVITY_CLEAR_TOP,会清理掉当前的位移。

二种办法

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

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

  由于这一个方法没有重返值,所以我们也不知情我们的目标经过是否真正退出了。不过,我当下只发现了那个可以截至另一个过程的章程。

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

爱尔兰语糟糕,不可以可靠翻译,所以指望我们自己精通,免得对我们造成误解。我个人对这句话的解释就是,这多少个办法应用是有规则的:

 

 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     }

为了便于,写了个批处理,将该批处理和ntsd放在一块儿,使用时举办批处理,选取相应的点子,并输入参数即可。

一、截至一个活动Activity

  需要专注的是,这六个点子,会造成进程非正常退出,就是说,进程退出时不会去执行onPause、onStop和onDestroy方法,那么进程很有可能失去了封存数据的机遇。因而,这两个艺术最好利用在现身极度的时候!

  在Android平台下,截至进程的方法仍旧相比较多的。首先指明,此处的“截至进程”,包含了收尾自己进程和得了其他进程多少个方面。通过查阅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.

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

  要通过一个进程去了却另一个进程。在事先的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.
),所以提议我们使用一个新的措施: 

三、截至另一个经过

  强行终止目前过程有几个主意。(呵呵,这里就是得了进程了)

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

  该模式只可以用来截止如今过程本身,个人认为在先后境遇特别,不能正常执行时,可以透过这多少个艺术强制退出。

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

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

  此方法确实停止了眼前进程,但是经过Android平台的App
Manager工具去查看的话,使用2.3.3的模拟器,会发觉刚刚被终结的进程会以Cached
background
Process的形式存在,并且模拟器给出了诠释,说是为了下五回更飞速的启动这么些过程。

发表评论

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

网站地图xml地图