2010-07-14 51 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

相關問題