关于使用killBackgroundProcesses杀进程不生效的问题

正如安卓API介绍,该函数立即杀掉所有与给定的程序包相关联的后台进程,请注意是后台进程:

voidkillBackgroundProcesses(String packageName)

Have the system immediately kill all background processes associated with the given package.

然后在stackovereflow上找到一篇问答:

https://stackoverflow.com/questions/19604097/killbackgroundprocesses-no-working?r=SearchResults

其中有一个回答如下:

/Android will not kill the app or process when it is displaying on screen i.e active view. so switch to home screen and then kill the app or process you want:

    public void KillApplication(String KillPackage)
{
    ActivityManager am = (ActivityManager)this.getSystemService(Context.ACTIVITY_SERVICE);    

    Intent startMain = new Intent(Intent.ACTION_MAIN); 
    startMain.addCategory(Intent.CATEGORY_HOME); 
    startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    this.startActivity(startMain);



    am.killBackgroundProcesses(KillPackage);
    Toast.makeText(getBaseContext(),"Process Killed : " + KillPackage  ,Toast.LENGTH_LONG).show();       
}

就是让你先切换到Home界面,使进程成为后台进程,这个时候再去杀后台进程。

所以该代码先切换到了Home界面,再直接调用killBackgroundProcesses。

然而题主说他这样做也不生效:

This is not working in my case. It is not killing background application which I provided via package name – Abdul Waheed Oct 28 at 13:59

但这个回答却有5个赞,于是我试了下,当手动按home键执行切换到桌面后,再调用killBackgroundProcesses可以成功杀掉该后台进程。emmmm...

所以我尝试了下,在调用切换到桌面的代码后,sleep一小会(300ms,非UI线程中做的。。)然后再调用killBackgroundProcesses,成功了。

 

从实验结果表现上来看,不执行sleep的情况下杀不死,可能是因为(个人想法):虽然调用了切换到桌面的代码,但实际上你要杀死的进程可能还未立即成为后台进程,而killBackgroundProcesses只杀后台进程,所以实际上是根本就没杀!

 

所以,killBackgroundProcesses这接口为啥不提供个返回值表示杀进程的结果? 

还有其他回答说可以使用forceStopPackage来杀,但是需要系统级别的权限,这样就还得为app生成系统级签名,嗯,我选择放弃。

 

总之,达到目的就好。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值