1

在我的活动中,我有一个 private BroadcastReceiver,当触发时,应该在几毫秒后更新 UI。在我的活动中,我有:

private BroadcastReceiver broadCastReceiver = new BroadcastReceiver() {

  @Override
  public void onReceive(Context context, Intent intent) {
    Log.e("BroadCastReciever: ", "UpdateCaseList");
    update.RefreshCaseList();
  }
};

BroadcastReceiver是从以下位置触发的Service

    @Override
    public void onCreate() {
        super.onCreate();
        intent = new Intent(BROADCAST_ACTION);
    }

    @Override
    public void onStart(Intent intent, int startId) {
        handler.removeCallbacks(sendUpdatesToUI);
        handler.postDelayed(sendUpdatesToUI, 0);
    }

    private Runnable sendUpdatesToUI = new Runnable() {
        public void run() {
            handler.postDelayed(this, 10000); // 10 seconds
            sendUpdateToUiThread();         
        }
    };

    private void sendUpdateToUiThread() {
        sendBroadcast(intent);
    }

我想当onStart我在我的方法中注册 BroadcastReceiver 时正在调用该OnResume()方法。我也注销了BroadcastReceiverin onPause

我的意图是这应该Activity每 10 秒向 发送一个通知。一旦我启动应用程序,我的服务将按计划每 10 秒通知一次 Activity。问题是当我离开活动并返回时,它不会activity每 10 秒发布一次通知,而是随机发布一次通知。我可以看到LogCat这种随机性垃圾邮件每 4、6、3、8、6 秒等发生一次。为什么会有这种行为?

4

1 回答 1

0

根据postDelayed文档,在经过毫秒后 调用 Runnable并且

在深度睡眠中花费的时间会增加执行的额外延迟。

所以一些随机性是设计使然。因此,在您的情况下,我希望 Runnable 在超过 10000 毫秒后调用

于 2016-07-14T09:35:41.000 回答