但当以下事件按此顺序发生时就会出现问题:
1. 应用被停止(通过onPause())。 2. 计时器完成。 3. 应用恢复(通过onResume())。
应用恢复后,服务不再发送广播,因此活动无法知道计时器还剩多少时间或者是否已经完成。这会阻止活动更新用户界面。
我已经尝试了许多方式来解决这个问题,并查看了许多Stack Overflow的问题和答案,但我仍然没有找到解决方案。我认为应该有一种方法可以捕获在活动不活跃时发送的广播,但我仍未找到方法。
以下是我相关的活动和服务代码:
// Start service
timerIntent.putExtra("totalLength", totalLength);
this.startService(timerIntent);
// ...
// BroadcastReceiver
private BroadcastReceiver br = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getExtras() != null && inSession) {
session.setRemaining(intent.getExtras().getLong("millisUntilFinished"));
updateProgress();
}
}
};
// ...
// onResume
@Override
public void onResume() {
super.onResume();
registerReceiver(br, new IntentFilter(TimerService.COUNTDOWN_TS));
}
service.java
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
long length = intent.getExtras().getLong("totalLength");
countDownTimer = new CountDownTimer(length, 1000) {
@Override
public void onTick(long millisUntilFinished) {
timerServiceIntent.putExtra("millisUntilFinished", millisUntilFinished);
sendBroadcast(timerServiceIntent);
}
@Override
public void onFinish() {
}
};
countDownTimer.start();
return super.onStartCommand(intent, flags, startId);
}
当活动被停止时,处理服务发送的广播的最佳方法是什么?