杀掉顽固的android进程

为了节省内存,故需要在android的apk任务完成后将服务杀掉,可是最近遇到了一个怎么也杀不掉的进程。

系统升级的apk主线程是一个服务,退出的时候会执行this.stop(),进而调到onDestroy()函数,在该函数中执行android.os.Process.killProcess(android.os.Process.myPid());会将进程杀掉。

理论上如此,然而我发现怎么杀都杀不掉,后来发现其中端倪,并不是杀不掉进程,而是每次杀掉后又再次被系统启动起来。kill以后执行ps的时候发现进程号会改变,也足以说明是杀掉以后再次起起来的。

为什么会出现这个问题呢,后来发现时在menifest清单文件里面设置了android:persistent="true"属性,该属性为常驻属性,因此在杀掉后会被系统再次启动起来,将该属性杀出后,问题彻底解决。

 

============================log====================================
  D/ActivityManager( 1397): checkNeedAccurateRestartService returns false
  I/ActivityManager( 1397): Process com.tcl.mtk.mtkVersionUpdate (pid 3061) has died.
  D/messagebox4.0_backCheckDataAging( 2362): CheckandUpdata
  D/messagebox4.0_backCheckDataAging( 2362): run thread
  D/messagebox4.0_backCheckDataAging( 2362): checkData
  D/messagebox4.0_backCheckDataAging( 2362): currTime->2015-01-14 00:00:00
  D/messagebox4.0_backDatabaseHelper( 2362): select
  I/ActivityManager( 1397): Start proc com.tcl.mtk.mtkVersionUpdate for restart com.tcl.mtk.mtkVersionUpdate: pid=3468 uid=1000 gids={41000, 3003, 3002, 3001, 1028, 1015, 1007, 1023,

============================log====================================

 

补充:还有一种情况,进程杀掉始终会被重启,那是因为该进程里面有contenProvider,只要其他应用使用这里面的数据,进程又会被启动。因此会一直在。但是此时进程在,服务不一定在。

可以通过服务存不存在判定是否需要重新启动:

/**
* 判断服务是否处于运行状态.
* @param servicename
* @param context
* @return
*/
public static boolean isServiceRunning(String servicename,Context context) {
ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
List<RunningServiceInfo> infos = am.getRunningServices(100);
for (RunningServiceInfo info: infos) {
Log.i(TAG, "info.service.getClassName() = " + info.service.getClassName());
if (servicename.equals(info.service.getClassName())) {
Log.i(TAG, "found service running..");
return true;
}
}
return false;
}

 

转载于:https://www.cnblogs.com/huamaoenjoy/p/4224300.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值