首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >BroadcastReceiver和PostDelay

BroadcastReceiver和PostDelay
EN

Stack Overflow用户
提问于 2013-08-01 00:33:03
回答 1查看 425关注 0票数 1

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

代码语言:javascript
复制
private BroadcastReceiver broadCastReceiver = new BroadcastReceiver() {

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

BroadcastReceiver是从Service触发的

代码语言:javascript
复制
    @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);
    }

我猜想当我在我的OnResume()方法中注册BroadcastReceiver时会调用onStart方法。我还在onPause中取消了BroadcastReceiver的注册。

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

EN

回答 1

Stack Overflow用户

发布于 2016-07-14 17:35:41

根据postDelayed documentation的说法,在经过毫秒之后,可运行的代码被称为

在深度睡眠中花费的

时间将增加执行的额外延迟。

因此,一些随机性是设计出来的。所以我希望在你的例子中,在之后调用的Runnable会超过10000毫秒。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17975987

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档