android - 为收到的每个广播创建一个新的 MyAppWidgetProvider 实例?

标签 android android-widget broadcastreceiver android-appwidget

我正在编写一个 Android 小部件。我有扩展 AppWidgetProvider 的 MyAppWidgetProvider。

在小部件的生命周期中,它会调用各种回调:onUpdate、onEnabled、onDisabled 等。它们由操作 ACTION_APPWIDGET_UPDATE、ACTION_APPWIDGET_ENABLED 等触发。

根据App Widget Guide , “[onDisabled] 是您应该清理在 onEnabled 中完成的所有工作的地方”。我将其解释为意味着 onEnabled 可能会在 MyAppWidgetProvider 中设置一些实例状态,而 onDisabled 应该将其拆除。但是,我发现会为每个操作创建一个新的 MyAppWidgetProvider 实例。

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

最佳答案

是的,您不能希望回收 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,您得到了答案。 :)

关于android - 为收到的每个广播创建一个新的 MyAppWidgetProvider 实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8746006/

相关文章:

android - 如何检查广​​播接收器是否在android中运行?

java - 有没有办法强制应用程序在使用主页按钮后始终从 Activity1 开始?

android - 如何在 Visual Studio Team Services 中的托管代理上查找 Android SDK 的位置?

android - 如何在eclipse中重建android jni C文件

android - textview 的重力属性未使文本居中

android - 在我的案例中,操作栏自定义样式

java - 在appium中滑动后无法单击元素

android - 带有 BaseAdapter 的 Android ListView 中的 ImageButton

java - 为了捕获 BOOT_COMPLETED,只需在 `AndroidManifest.xml` 中注册 BroadcastReceiver 就足够了吗?

Android 服务在 Runnable 仍在执行时关闭