我使用一个带有多个定时器的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;
}发布于 2015-07-02 14:01:45
然后我试了一下START_CONTINUATION_MASK,效果很好
因为这不是一个有效的返回值,您的结果将因设备和Android操作系统版本而异。顾名思义,START_CONTINUATION_MASK是位掩码,显示服务的延续规则使用哪些位。来自onStartCommand()的返回值的唯一有效值是START_STICKY、START_NOT_STICKY、START_REDELIVER_INTENT或START_STICKY_COMPATIBILITY。
希望此服务继续进行,即使用户杀死了该应用程序。
无论您喜欢与否,只要用户和操作系统愿意,欢迎用户和操作系统停止服务。
我尝试了START_STICKY,但是在关闭应用程序之后,计时器重新启动(因为我在onStartCommand中启动了它们)。
将定时器的详细信息存储在某些持久数据存储区(文件、数据库、SharedPreferences)中,以便在进程及其服务重新启动时,您可以根据需要再次启动定时器。
发布于 2017-08-07 13:11:31
为了保持服务在后台运行,即使用户杀死了应用程序或将其从最近的应用程序中删除,您应该使用前台服务。
https://stackoverflow.com/questions/31186478
复制相似问题