2010-07-14 64 views
2

对于Android的AppWidget机器如何工作,我感到不知所措。为什么每次添加应用程序小部件时都会创建AppWidgetProvider?

我重新实现了的AppWidgetProvider的构造是这样的:

public class MyProvider extends AppWidgetProvider { 

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

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

从我的文档读过,我明白的AppWidgetProvider被实例化一次,当添加首次这种类型的部件。如果类型的另一个小部件相同类型被添加,它将由该提供者管理。

但我刚发现情况并非如此!我创建了一个新的MyProvider(我从'adb logcat'中看到 - 它为每个部件打印“Creating ...”)! 我不小心为什么:) 也许我有什么问题?或者文件不清楚的东西。 如果每个供应商只管理一个小部件,appWidgetId传递给 onUpdate和其他方法的原因是什么?

+0

我相信AppWidgetManager被实例化一次,AppWidgetProvider会为每个添加的小部件实例创建。您在文档中的哪里看到应用程序小部件提供程序仅创建一次,我无法在其中找到该信息? – 2010-07-14 13:56:49

+0

我只是假设,因为我看到了appWidgetIds参数:) 我认为“如果它总是等于1,它有什么意义”。 谢谢。还请看下面的答案,伙计们是对的 – dimsuz 2010-07-15 08:08:00

回答

6

AppWidgetProviderBroadcastReceiver的子类。引述BroadcastReceiver documentation

一个BroadcastReceiver目的是仅有效 在呼叫的持续时间以 的onReceive(上下文,意图)。一旦您的 代码从此函数返回,则 系统会认为该对象已完成且不再处于活动状态,即 。

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

+0

确实。感谢您的解释! – dimsuz 2010-07-15 08:08:16

0

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

+0

谢谢!似乎上面的答案更详细,所以我会将其标记为接受:) – dimsuz 2010-07-15 08:09:19

相关问题