我对android的AppWidget机器如何运作感到困惑。
我重新实现了AppWidgetProvider的构造函数,如下所示:
public class MyProvider extends AppWidgetProvider {
public MyProvider() {
Log.d("TEST", "Creating...")
}
public void onUpdate(..., int[] appWidgetIds) {
// updating stuff here
}
}
从我在文档中读到的内容中,我了解AppWidgetProvider实例化一次,当第一次添加该类型的widget时。如果添加了相同类型的另一个小部件,则它将由该提供商进行管理。
但我刚发现事实并非如此!
对于我添加的每个小部件,android创建一个新的MyProvider(我从'adb logcat'看到它 - 它为每个小部件打印“Creating ...”)! 我没有理解为什么:) 也许我弄错了?或者文档不清楚。 如果每个提供商只管理一个小部件,那么将appWidgetIds传递给 onUpdate 和其他方法的原因是什么?
答案 0 :(得分:6)
AppWidgetProvider
是BroadcastReceiver
的子类。引用BroadcastReceiver
documentation:
仅限BroadcastReceiver对象 在通话期间有效 onReceive(Context,Intent)。一旦你的 代码从这个函数返回, 系统认为对象是 已完成,不再有效。
因此,AppWidgetProviders
是一次性的,应该这样对待。每个应用小部件操作(更新等)都将导致创建,使用和丢弃提供者。
答案 1 :(得分:0)
AppWidgetManager仅创建一次。为每个创建的AppWidget创建AppWidgetProvider。