【问题标题】:Why is AppWidgetProvider created each time I add an app widget?为什么每次添加应用小部件时都会创建 AppWidgetProvider?
【发布时间】:2010-07-14 13:37:13
【问题描述】:

我对 android 的 AppWidget 机制如何工作感到有些困惑。

我重新实现了 AppWidgetProvider 的构造函数,如下所示:

public class MyProvider extends AppWidgetProvider {

   public MyProvider() {
     Log.d("TEST", "Creating...")
   }

   public void onUpdate(..., int[] appWidgetIds) {
      // updating stuff here
   } 
}

根据我在文档中阅读的内容,我了解到 AppWidgetProvider 在第一次添加该类型的小部件时被实例化一次。如果添加了另一个 相同 类型的小部件,它将完全由该提供者管理。

但我才发现不是这样的!

对于我添加的每个小部件,android 都会创建一个新的 MyProvider(我从“adb logcat”中看到 - 它为每个小部件打印“正在创建...”)! 我不明白为什么:) 也许我做错了什么?或者文档不清楚。 如果每个提供者只管理一个小部件,那么将 appWidgetIds 传递给 onUpdate 和其他方法的原因是什么?

【问题讨论】:

  • 我相信 AppWidgetManager 被实例化一次,AppWidgetProvider 将为每个添加的小部件实例创建。您在文档中的哪个位置看到应用小部件提供程序仅创建一次,我在其中找不到该信息?
  • 我只是假设因为我看到了 appWidgetIds 参数 :) 我想“如果它总是等于 1 有什么意义”。谢谢你。另请参阅下面的答案,伙计们是对的

标签: android widget android-widget


【解决方案1】:

AppWidgetProvider 是BroadcastReceiver 的子类。引用BroadcastReceiver documentation:

BroadcastReceiver 对象只是 在调用期间有效 onReceive(上下文,意图)。一旦你 代码从此函数返回, 系统认为对象是 已完成且不再处于活动状态。

因此,AppWidgetProviders 是一次性的,应该这样对待。每个应用小部件操作(更新等)都会导致创建、使用和丢弃提供程序。

【讨论】:

  • 确实如此。谢谢解释!
【解决方案2】:

AppWidgetManager 只创建一次。为每个创建的 AppWidget 创建一个AppWidgetProvider。

【讨论】:

    猜你喜欢
    • 2019-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-14
    • 1970-01-01
    • 1970-01-01
    • 2021-08-17
    • 1970-01-01
    相关资源
    最近更新 更多