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“…我喜欢将消息保存到某个位置并在活动开始时显示它们的想法。”
如果将其保存在服务中,并在活动绑定到服务时请求数据,请阅读有关本地绑定服务的内容。
模式