菜单

Android下得了进程的方法

2019年9月16日 - LINUX

 使用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.

 

克罗地亚(Croatia)语倒霉,不能够标准翻译,所以希望我们自个儿清楚,免得对我们变成误解。作者个人对那句话的表明正是,那些办法应用是有标准化的:

 

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地图