正如安卓API介绍,该函数立即杀掉所有与给定的程序包相关联的后台进程,请注意是后台进程:
void | killBackgroundProcesses(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生成系统级签名,嗯,我选择放弃。
总之,达到目的就好。