• 杀掉顽固的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;
    }

  • 相关阅读:
    GTK+中的树状列表构件(GtkTreeView)
    [TOP]疯狂的投资
    多线程模式之MasterWorker模式
    一年读书总结
    Microsoft Visual Studio正忙解决办法
    使用vs自带的性能诊断工具
    C#中的扩展方法
    从委托、匿名方法到Lambda
    c#中的事件
    sqlserver中创建包含事务的存储过程
  • 原文地址:https://www.cnblogs.com/huamaoenjoy/p/4224300.html
Copyright © 2020-2023  润新知