android - 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();
}
现在一切都按预期工作,但上面看起来很难看而且有点骇人听闻,有没有更好的方法在活动创建之前发送广播意图?
解决方案
无需创建并向其Activity
发送广播Intent
,只需将广播的内容放入Intent
您Intent
用于启动的Activity
(作为“额外”)。然后你不需要 3 秒的延迟,你只需要在广播已经运行Intent
的情况下发送广播。Activity
推荐阅读
- google-cloud-dataflow - 运行 WordcCount 示例 DataFlow Runner
- postgresql - 尝试创建数据库迁移时获取“无法将主机名“db”转换为地址”
- reactjs - 使用自定义日期格式导出反应材料表
- unit-testing - Dart 测试在正常代码之后执行
- laravel - 哎呀,看起来 laravel 5.8 出了点问题
- sql - 如何将行中的一些值转置为列?
- r - 编写一个 R 函数来查找二进制子集
- docker - 使用 docker-compose 创建一个仅限内部的 Docker 覆盖网络
- asp.net - ASP.NET Form 会从 Barcode 中获取价值吗
- aspose.words - Aspose 生成的 doc 文件为某些用户将下划线变为空白