我有一项服务,我需要检查一下静态上下文后它是否仍在运行。 [我注意到这只发生在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
}
有两种情况:
第二种情况发生了什么?
答案 0 :(得分:2)
我发现这是Android KitKat的问题,如果你想查看它:
答案 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);
}
}