BroadcastReceiver和PostDelay

时间:2013-07-31 16:33:03

标签: android android-service android-broadcast

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

private BroadcastReceiver broadCastReceiver = new BroadcastReceiver() {

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

BroadcastReceiverService

触发
    @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()方法。我还取消注册BroadcastReceiver中的onPause

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

1 个答案:

答案 0 :(得分:0)

根据postDelayed documentation 在毫秒编程过后

后,Runnable被称为
  

深度睡眠所花费的时间会给执行带来额外的延迟。

所以一些随机性是设计的。所以我希望在你的情况下,Runnable在更多之后调用超过10000毫秒。