首页 > 解决方案 > Android为活动初始化LocalBroadcastReceiver的正确位置

问题描述

我有一个具有如下 BroadcastReceiver 的 android 活动。

@Override
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver, intentFilter);
}

private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
          Log.i("TAG", intent.getAction());
        }
};

问题是我从网络接收消息,根据消息类型,我创建活动或向活动发送广播消息,因为我收到消息非常快,创建活动的消息类型在要发送的消息类型之前(几毫秒)到达向同一个活动广播消息,我得到一个错误handleWindowVisibility: no activity for token android.os.BinderProxy研究了一下我发现在我发送广播意图之前可能没有正确创建活动。所以我让线程休眠了 3 秒。

        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

现在一切都按预期工作,但上面看起来很难看而且有点骇人听闻,有没有更好的方法在活动创建之前发送广播意图?

标签: androidbroadcastreceiverandroid-broadcastlocalbroadcastmanager

解决方案


无需创建并向其Activity发送广播Intent,只需将广播的内容放入IntentIntent用于启动的Activity(作为“额外”)。然后你不需要 3 秒的延迟,你只需要在广播已经运行Intent的情况下发送广播。Activity


推荐阅读