Android用于初始化活动的LocalBroadcastReceiver的正确位置

问题描述 投票:0回答:1

我有一个具有如下所示的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();
        }

现在一切正常,但是上面的代码看起来很丑陋,有点笨拙,在活动创建之前,有没有更好的方法发送广播意图?

android broadcastreceiver android-broadcast localbroadcastmanager
1个回答
0
投票

[而不是创建Activity并向其发送广播Intent,只需将广播Intent的内容放入用于启动IntentActivity中(作为“额外”)。然后,您不需要3秒的延迟,仅在Intent已在运行时才发送广播Activity

© www.soinside.com 2019 - 2024. All rights reserved.