我的活动通过调用启动服务startservice()
。为了简化我的问题,假设该服务将是一个计数器,并且该计数器将每 10 秒增加一次。
Timer t_counter;
int counter = 0;
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
t_counter = new Timer();
t_counter.schedule(new TimerTask() {
@Override
public void run() {
counter++;
Log.d("counter: ",Integer.toString(counter));
}}, 0, 10000);
return Service.START_STICKY;
}
当手机正在充电时(或处于调试模式 - 因为我可以看到Logcat
),服务按预期工作。Logcat
无论应用程序是否处于后台,大约每 10 秒显示一次调试信息。但是当我拔掉电话时,服务会在一段时间后停止运行。应用程序(启动服务的活动)处于活动状态时的事件。请注意,服务没有被破坏,只是被搁置,或者类似的东西。
因为当我再次插入手机时,计时器会继续,并且计数器的值会从我刚刚拔下手机的值开始增加。因此,如果服务已被销毁,那么价值将再次为零。(我也在调试服务的生命周期,但看不到onStartCOmmand()
,onDestroy()
会被调用)
我已经为它搜索了解决方案,但我认为我没有为这种行为找到正确的答案。我知道我应该使用AlarmManager
而不是 Timer。或者,如果我将服务前台放在,它也可以工作startForeground()
,或者单独的进程可以解决这个问题。但我想知道为什么我的解决方案适用于充电。另外,我在哪里可以找到有关此“空闲”服务状态的信息。(不执行定时器计划,但不破坏)谢谢!