由于服务START_CONTINUATION_MASK,应用未响应

时间:2015-07-02 13:50:52

标签: java android

我使用带有多个计时器的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;
}

2 个答案:

答案 0 :(得分:3)

  

然后我尝试了START_CONTINUATION_MASK并且效果很好

由于这不是有效的返回值,因此您的结果会因设备和Android操作系统版本而异。 START_CONTINUATION_MASK是一个位掩码,顾名思义,显示哪些位用于服务的延续规则。来自onStartCommand()的返回值的唯一有效值为START_STICKYSTART_NOT_STICKYSTART_REDELIVER_INTENTSTART_STICKY_COMPATIBILITY

  

希望此服务继续,即使用户杀死应用

欢迎用户和操作系统在用户和操作系统想要的时候停止服务,无论您是否愿意。

  

我尝试了START_STICKY,但在杀死应用程序后,计时器重新启动(因为我在onStartCommand中启动它们)。

将计时器的详细信息存储在某个持久性数据存储(文件,数据库,SharedPreferences)中,以便您可以在重新启动进程及其服务时根据需要再次启动计时器。

答案 1 :(得分:0)

要使服务在后台运行,即使用户杀死应用程序或将其从最近的应用程序中删除,也应该使用前台服务。