我使用带有多个计时器的Service
类,并希望此服务继续,即使用户杀死了应用程序。我尝试START_STICKY
但是在杀死应用程序后,计时器重新启动(因为我在onStartCommand
启动它们)。
然后我尝试START_CONTINUATION_MASK
并且它工作得很好,但有时一段时间后应用程序崩溃并出现错误:“应用程序没有响应。你要关闭它吗?”。我不能使用START_REDELIVER_INTENT
或者......否则,因为在每个onStartCommand
上创建了另一个计时器,其持续时间不是固定的结束时间。
有解决此问题的方法吗?
修改:这是我的onStartCommand
@Override
public int onStartCommand (Intent intent, int flags, int startId) {
CountDownTimer cdt = new CountDownTimer(7000, 1000) {
@Override
public void onTick(long millisUntilFinished) {
Log.d("ms till finish:", "" + millisUntilFinished);
}
@Override
public void onFinish() {
timerList.remove(this);
Log.e("amount timers:", "" + timerList.size());
if (timerList.size() == 0) {
stopSelf();
}
}
};
cdt.start();
timerList.add(cdt);
return START_CONTINUATION_MASK;
}
答案 0 :(得分:3)
然后我尝试了START_CONTINUATION_MASK并且效果很好
由于这不是有效的返回值,因此您的结果会因设备和Android操作系统版本而异。 START_CONTINUATION_MASK
是一个位掩码,顾名思义,显示哪些位用于服务的延续规则。来自onStartCommand()
的返回值的唯一有效值为START_STICKY
,START_NOT_STICKY
,START_REDELIVER_INTENT
或START_STICKY_COMPATIBILITY
。
希望此服务继续,即使用户杀死应用
欢迎用户和操作系统在用户和操作系统想要的时候停止服务,无论您是否愿意。
我尝试了START_STICKY,但在杀死应用程序后,计时器重新启动(因为我在onStartCommand中启动它们)。
将计时器的详细信息存储在某个持久性数据存储(文件,数据库,SharedPreferences
)中,以便您可以在重新启动进程及其服务时根据需要再次启动计时器。
答案 1 :(得分:0)
要使服务在后台运行,即使用户杀死应用程序或将其从最近的应用程序中删除,也应该使用前台服务。