1

我在写Android小部件。我有扩展AppWidgetProvider的MyAppWidgetProvider。为接收到的每个广播创建了一个MyAppWidgetProvider的新实例?

在小部件的生命周期,它得到各种回调调用它:的onUpdate,onEnabled,onDisabled,等他们通过操作触发ACTION_APPWIDGET_UPDATE,ACTION_APPWIDGET_ENABLED等

按照App Widget Guide“[onDisabled]是你应该清理在onEnabled中完成的任何工作的地方“。我将其解释为意味着onEnabled可能会在MyAppWidgetProvider中设置一些实例状态,并且onDisabled应该将其删除。但是,我发现为每一个操作都创建了一个MyAppWidgetProvider的新实例。

那么,这是预期的行为?我是否总是希望为每个回调创建一个新实例,或者有什么方法可以配置广播接收者或发送者使用现有实例?如果总是创建一个新实例,那么将任何实例状态存储在MyAppWidgetProvider中是不安全的,这从文档中是不清楚的。

回答

2

是的,你不能希望只有一个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,你有你的答案。 :)

1

我对AppWidgetProvider不是很熟悉,但是因为它是一种BroadcastReceiver类型,所以在每个事件上都应该启动一个新实例。在BroadcastReceiver中处理应该是最小的。在这种情况下,仅用于从新意图中获取的信息更新应用程序窗口小部件。

相关问题