KitKat:退出主活动后服务为空

时间:2014-01-12 09:29:02

标签: android android-service

我有一项服务,我需要检查一下静态上下文后它是否仍在运行。 [我注意到这只发生在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. 我运行活动,使用enter image description here“杀死”它,等待报警接收器被调用, Servizio.servizio 现在为空。另请注意,该服务仍在运行(从Settings-> App-> Running菜单中查看)。
  3. 第二种情况发生了什么?

2 个答案:

答案 0 :(得分:2)

答案 1 :(得分: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); 
    }
}