为收到的每个广播创建一个新的 MyAppWidgetProvider 实例?
Posted
技术标签:
【中文标题】为收到的每个广播创建一个新的 MyAppWidgetProvider 实例?【英文标题】:A new instance of MyAppWidgetProvider created for every broadcast received? 【发布时间】:2012-02-03 11:37:18 【问题描述】:我正在编写一个 android 小部件。我有 MyAppWidgetProvider,它扩展了 AppWidgetProvider。
在小部件的生命周期中,它会调用各种回调:onUpdate、onEnabled、onDisabled 等。它们由操作 ACTION_APPWIDGET_UPDATE、ACTION_APPWIDGET_ENABLED 等触发。
根据App Widget Guide,“[onDisabled] 是您应该清理在 onEnabled 中完成的任何工作的地方”。我解释这意味着 onEnabled 可能会在 MyAppWidgetProvider 中设置一些实例状态,并且 onDisabled 应该将其拆除。但是,我发现为每个操作都创建了一个新的 MyAppWidgetProvider 实例。
那么,这是预期的行为吗?我是否应该总是期望为每个回调创建一个新实例,或者是否有某种方法可以配置广播接收器或发送器以使用现有实例?如果总是创建一个新实例,那么在 MyAppWidgetProvider 中存储任何实例状态都是不安全的,这在文档中并不清楚。
【问题讨论】:
【参考方案1】:是的,您不能希望回收单个 BroadcastReceiver 实例。
docs states 那个:
A BroadcastReceiver object is only valid for the duration of the call to
onReceive(Context, Intent). Once your code returns from this function, the system
considers the object to be finished and no longer active.
随着 AppWidgetProvider 扩展 BroadcastReceiver,您得到了答案。 :)
【讨论】:
【参考方案2】:我对 AppWidgetProvider 不是很熟悉,但因为它是 BroadcastReceiver 的一种,所以应该在每个事件上启动一个新实例是正确的。 BroadcastReceiver 中的处理应该是最少的。在这种情况下,仅用于使用从新意图获得的信息更新应用小部件。
【讨论】:
以上是关于为收到的每个广播创建一个新的 MyAppWidgetProvider 实例?的主要内容,如果未能解决你的问题,请参考以下文章
MainActivity 中的 Android 类没有收到来自警报管理器的广播