我正在写一个Android小部件。我有MyAppWidgetProvider,它扩展了AppWidgetProvider。
在窗口小部件的生命周期中,它会调用各种调用:onUpdate,onEnabled,onDisabled等。它们由ACTION_APPWIDGET_UPDATE,ACTION_APPWIDGET_ENABLED等操作触发。
根据App Widget Guide,“[onDisabled]是你应该清理onEnabled中完成的任何工作的地方”。我将其解释为onEnabled可能会在MyAppWidgetProvider中设置一些实例状态,并且onDisabled应该将其拆除。但是,我发现每个动作都会创建一个新的MyAppWidgetProvider实例。
那么,这是预期的行为吗?我是否应该始终期望为每个回调创建一个新实例,或者是否有某种方法来配置广播接收器或发送器以使用现有实例?如果总是创建一个新实例,那么在MyAppWidgetProvider中存储任何实例状态是不安全的,这在文档中是不明确的。
答案 0 :(得分:2)
是的,你不能希望将一个BroadcastReceiver的实例回收。
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,你得到了答案。 :)
答案 1 :(得分:1)
我对AppWidgetProvider不是很熟悉,但由于它是一种BroadcastReceiver,因此在每个事件上应该启动一个新实例是正确的。 BroadcastReceiver中的处理应该是最小的。在这种情况下,仅用于使用从新意图获得的信息更新app小部件。