Android 在活动期间接收广播';生命周期的变化

Android 在活动期间接收广播';生命周期的变化,android,android-intent,android-activity,broadcastreceiver,intentservice,Android,Android Intent,Android Activity,Broadcastreceiver,Intentservice,假设我有一个活动。在其onCreate生命周期回调中,我创建了一个BroadcastReceiver对象,将其实现为一个匿名类,并将一些代码放在其onReceive回调中,该回调需要活动上下文在调用时显示Toast消息。在Activity的onResume回调中,我注册了BroadcastReceiver,在onPause中取消注册,因为它包含需要Activity上下文的代码,如果Activity正在执行销毁过程,它可能不可用,即方向改变。这意味着,如果某个东西,即IntentService在未

假设我有一个
活动
。在其
onCreate
生命周期回调中,我创建了一个
BroadcastReceiver
对象,将其实现为一个匿名类,并将一些代码放在其
onReceive
回调中,该回调需要
活动
上下文
在调用时显示
Toast
消息。在
Activity
onResume
回调中,我注册了
BroadcastReceiver
,在
onPause
中取消注册,因为它包含需要
Activity
上下文的代码,如果
Activity
正在执行销毁过程,它可能不可用,即方向改变。这意味着,如果某个东西,即
IntentService
在未注册的情况下为该
BroadcastReceiver
广播
意图(无论多么短,但仍然可能发生),则该
意图将永远无法传递,处理该意图的正确操作也永远不会发生。因此,用户可能会错过一些重要信息(通知成功注册的消息、警告出错等),我说的对吗?这种情况真的会发生吗?如何预防?如何确保
BroadcastReceiver
无论应用程序的某个部分何时启动它都将接收广播?

创建
MyBroadcastReceiver
扩展
BroadcastReceiver
(当然是:D),并使用适当的意图过滤器操作将其注册到清单中。然后在
onReceive()
中,您可以访问
应用程序的上下文。请记住,即使您的应用程序已关闭,也会触发
onReceive()
(例如,如果您的操作是
Intent.action\u SCREEN\u OFF
)。
这取决于你在该接收器中尝试执行的操作……如果你必须在应用程序中发送事件,还可以查看EventBus。

不要使用
BroadcastReceiver
在这种情况下,请使用“绑定服务”模式,否则我会完全忘记类似的事情。已经很长时间没有为Android开发了:(.我会想到一个使用绑定服务的解决方案,但我仍然希望得到一些更简单的解决方案建议。在
BroadcastReceiver
onReceive
中,我只想为用户显示一条消息,但该消息可能以
文本视图的形式显示,但没有
活动
上下文
rea我认为
TextView
毫无意义:)好的,是谁发送的消息?如果我做对了,你想在队列到达时把消息推到队列中,当<代码>活动>代码>打开时,显示那些消息?你可能想考虑保存这些消息……我想我不明白为什么你想在活动未打开时显示消息。你理解我错了。我不想让
活动
知道某些
服务
何时完成其工作。如果
活动
由于用户的意愿而被破坏,则不应显示消息,但我担心这可能会发生在例如方向更改时。这样
活动
可能不会收到发出该消息用户等待已发送且永远不会再次发送的消息。哦,好的!在这种情况下,您可能需要覆盖
onConfigurationChanged()
这允许您设置横向布局,而无需重新启动
活动。请查看:@slaven
“…我喜欢将消息保存到某个位置并在活动开始时显示它们的想法。”
如果将其保存在服务中,并在活动绑定到服务时请求数据,请阅读有关
本地绑定服务的内容。
模式