【问题标题】:Simulate Android killing and restart service模拟Android查杀重启服务
【发布时间】:2015-06-08 17:40:33
【问题描述】:

我想模拟 android 杀戮并重新启动我的服务,以测试当我收到 null 意图时会发生什么以及我需要对清理/恢复做什么。这可能吗?

public MyService extends Service {
  @Override
  public void onCreate() {
    //Do stuff
  }

  @Override
  public void onStartCommand(Intent intent, int flags, int startId) {
    if (intent == null) {
      //Do stuff for restart
    } else {
      //Do stuff for normal start
      return START_STICKY;
    }
  }


  @Override
  public void onDestroy() {
    //Cleanup that may never be called!
  }
}

注意:我读过how-to-simulate-android-killing-my-process。答案非常有用!但我认为我的用例有点不同。

【问题讨论】:

    标签: android android-intent service


    【解决方案1】:

    您可以使用相同的方法来模拟服务终止和重启。

    启动服务(onStartCommand返回START_STICKY),logcat显示:

    08-13 11:55:38.649 24159-24159/? D/TAG: onCreate()
    08-13 11:55:38.650 24159-24159/? D/TAG: onStartCommand: intent is null? false; flags=0; startId=1
    

    在这个阶段,使用following command杀死进程:

    adb shell ps | grep <package name> | awk '{print $2}' | xargs adb shell run-as <package name again> kill
    

    服务立即重新启动(注意新的进程 ID 和意图为空的事实):

    08-13 11:55:43.742 24236-24236/? D/TAG: onCreate()
    08-13 11:55:43.743 24236-24236/? D/TAG: onStartCommand: intent is null? true; flags=0; startId=2
    

    【讨论】:

    • 这几乎是公认的答案。对我有用,对调试粘性后台服务重启有很大帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-30
    相关资源
    最近更新 更多