2012-02-21 61 views
0

據我所知,有兩種類型調用的AppWidgetProvider的的onUpdate()方法:它可以確定如何調用AppWidgetProvider的onUpdate()方法?

  1. 時updatePeriodMillis圓過期
  2. 當增加新的部件到主屏幕

在的onUpdate()方法,我想在第一種情況下啓動一些服務,但不會在第二種情況下。是否有可能確定如何調用onUpdate()?

回答

0

我認爲在更新廣播中沒有提供給您的簡單標誌,它表示兩種情況。

請記住,每個ACTION_APPWIDGET_UPDATE廣播(因此每個onUpdate()調用)包含用於更新目的的appwidget ID的全部或子集。這些ID在小部件的生命週期中是不變的,每個ID在被刪除之前都有相同的ID。

這意味着您可以存儲您的ID並在每次進行onUpdate()調用時進行比較。如果您在提供的數組中使用ID不在保存的記錄中的onUpdate(),可以確定這是一個更新的新小部件實例。否則,它是一個或多箇舊的。

爲了保持記錄的整潔,您必須在您的提供商中實施onDeleted()。從記錄中刪除已刪除的ID。否則,當用戶移除小部件並添加新實例時,您可能遇到問題,它可能會獲得相同的ID。

+0

感謝您的回答!這個對我有用。在我的應用程序中,每個新的小部件ID都存儲在SQLite錶行中,並帶有一些小部件設置。因此,所需的檢查是檢查是否存在具有相應小部件標識的行。而且我還刪除了從主屏幕刪除小部件時的表格行。 – riden 2012-02-21 19:15:09

相關問題