【问题标题】:KitKat: Service is null after exiting main activityKitKat:退出主要活动后服务为空
【发布时间】:2014-01-31 03:03:21
【问题描述】:

我有一项服务,我需要在静态上下文中检查一段时间后它是否仍在运行。 [我注意到这只发生在 Android KitKat 上]

我做了什么:

我的服务:

public class Servizio extends Service {

   public static Service servizio;

   [...Other things...]

   @Override
   public void onCreate() {
   super.onCreate();
   servizio = this;
      scheduleMyAlarmToDoSomethingAfterSomeTime();

   }

[...Other things...]
}

然后我从 onCreate 中的主 Activity 启动服务:

@Override
protected void onCreate(Bundle savedInstanceState) {
    [...]
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    ServizioUtility.toggleService(this, true);
    [...]
}

然后我在一分钟后检查它是否为空(使用警报接收器,其警报由服务启动。请注意,接收器工作正常并调用以下代码):

if (Servizio.servizio!=null) {// FIXME
    [...]
    //THIS IS NOT CALLED IN THE 2ND SCENARIO
}

有两种情况:

  1. 我运行活动,等待警报启动,Servizio.servizio 不为空。
  2. 我运行活动,使用“杀死”它,等待调用警报接收器,Servizio.servizio 现在为空。请注意,另一方面,该服务仍在运行(从 Settings->App->Running 菜单检查)。

第二种情况发生了什么?

【问题讨论】:

  • 查看类似问题(有解决方案)stackoverflow.com/q/20636330/624109
  • 服务在设置->应用->运行中可能看起来正在运行,但实际上并没有运行。您可以通过让服务将文件写入 SD 或实际检查正在运行的进程来进行检查。它没有运行。
  • 是的,看起来但不是,实际上服务单例是空的。

标签: android android-service


【解决方案1】:

我发现这是 Android KitKat 的一个问题,如果你想检查一下:

https://code.google.com/p/android/issues/detail?id=63793

https://code.google.com/p/android/issues/detail?id=63618

【讨论】:

    【解决方案2】:

    我的简单解决方法:

    它设置警报延迟 1 秒,并通过调用 stopForeground() 停止服务。

    @Override
    public void onTaskRemoved(Intent rootIntent) {
        super.onTaskRemoved(rootIntent);
        if (Build.VERSION.SDK_INT >= 19) {
            Intent serviceIntent = new Intent(this, MessageHandlerService.class);
            serviceIntent.setAction(ACTION_REFRESH);
            serviceIntent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND);
            AlarmManager manager = (AlarmManager) getSystemService(ALARM_SERVICE);
            manager.set(AlarmManager.RTC, System.currentTimeMillis()+1000, PendingIntent.getService(this, 1, serviceIntent, 0)); //1 sec delay
            stopForeground(true); 
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2017-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多