gpt4 book ai didi

android - 在 Activity 和 BroadcastReceiver 之间进行通信的正确方法是什么?

转载 作者:行者123 更新时间:2023-11-29 14:47:51 49 4
gpt4 key购买 nike

我有一个 BroadcastReceiver,它监听系统 Intent ,例如 Intent.ACTION_PACKAGE_ADDED。当它收到一个时,Activity 需要刷新它所呈现的数据。当然,发生这种情况时,Activity 可能没有焦点,或者甚至可能没有运行。下次 Activity 获得焦点时“留言”的正确方法是什么?

我想在 SharedPreferences 中存储一个 bool 值,但有些事情告诉我这不是正确的方法。

最佳答案

What is the proper way to "leave a message" for the next time the Activity gains focus?

恕我直言,您在这里有四个不同的问题:

问题 #1:BroadcastReceiver 如何告诉正在运行的 Activity 发生了可能感兴趣的事件?

解决方案:使用事件总线(LocalBroadcastManager,greenrobot的EventBus,Square的Otto),在总线上发送一个来自receiver的package-added事件。您的 Activity 可以在前台运行时为来自总线的事件注册,并且可以在收到您的事件时更新其数据 View 。

问题 #2:当广播发生时,BroadcastReceiver 如何更新 SQLite 数据库中的模型数据?

解决方案:将此以及事件总线逻辑的接收方端委托(delegate)给 IntentService,因为您需要一个后台线程来执行数据库 I/O。工作完成后将事件发布到公交车上。

问题 #3:那么,如果在事件结束时我的 Activity 不在前台,但 Activity 存在(即在后台),会发生什么情况?

解决方案:要么在 onResume() 中重新加载数据,要么对总线使用某种“粘性”事件。 LocalBroadcastManager 不提供此功能,但 greenrobot 的 EventBus 具有粘性事件的概念,而 Square 的 Otto 具有相关的 @Producer 结构。

问题 #4:如果我根本没有 Activity 实例会怎样?例如,当我的进程未运行时添加包,因此 Android 为我创建了一个进程并调用了我的接收器,但我现在的进程中根本没有 UI 代码?

解决方案:不要做任何特别的事情。您现有的“加载数据”逻辑将处理这种情况。

关于android - 在 Activity 和 BroadcastReceiver 之间进行通信的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29262849/

49 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com