【问题标题】:A new instance of MyAppWidgetProvider created for every broadcast received?为收到的每个广播创建一个新的 MyAppWidgetProvider 实例?
【发布时间】: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 中存储任何实例状态都是不安全的,这在文档中并不清楚。

【问题讨论】:

    标签: android android-widget broadcastreceiver android-appwidget


    【解决方案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 中的处理应该是最少的。在这种情况下,仅用于使用从新意图获得的信息更新应用小部件。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-20
        • 1970-01-01
        • 2022-07-21
        • 1970-01-01
        相关资源
        最近更新 更多