這是設置在updatePeriodMillis像900000毫秒是一個好主意。這將每15分鐘調用一次onUpdate方法。在onUpdate方法中,您可以「刷新」遠程視圖的未決意圖。您可以做的另一件事是每次更改遠程視圖時執行小部件更新。例如,用戶按下按鈕就可以做你必須做的事情,然後執行小部件更新。
有很多原因會導致掛起的意圖被系統破壞,從而導致您的遠程視圖死機,並且所有這些視圖都很難找到並理解,因此最佳做法是一次更新您的小部件。
我的研究表明,15分鐘是一個很好的時間框架。例如,這是一個運行,每15分鐘有許多按鈕的控件我的onUpdate方法:
和FullWidgetUpdate方法是這樣的:
...
views.setInt(R.id.cmdwifi, "setBackgroundResource", ThemeResources.getThemeResource(themeId, R.drawable.btn_bck_topleft_black));
views.setInt(R.id.cmdbluetooth, "setBackgroundResource", ThemeResources.getThemeResource(themeId, R.drawable.btn_bck_middle_black));
views.setInt(R.id.cmddata, "setBackgroundResource", ThemeResources.getThemeResource(themeId, R.drawable.btn_bck_middle_black));
views.setInt(R.id.cmdsync, "setBackgroundResource", ThemeResources.getThemeResource(themeId, R.drawable.btn_bck_middle_black));
views.setInt(R.id.cmdflight, "setBackgroundResource", ThemeResources.getThemeResource(themeId, R.drawable.btn_bck_middle_black));
views.setInt(R.id.cmdgps, "setBackgroundResource", ThemeResources.getThemeResource(themeId, R.drawable.btn_bck_middle_black));
views.setInt(R.id.cmdorientation, "setBackgroundResource", ThemeResources.getThemeResource(themeId, R.drawable.btn_bck_middle_black));
views.setInt(R.id.cmdvolume, "setBackgroundResource", ThemeResources.getThemeResource(themeId, R.drawable.btn_bck_topright_black));
...
final int PendingIntentFLAG = PendingIntent.FLAG_UPDATE_CURRENT;
Intent iWiFi = new Intent(cx, CommandsReceiver.class).setAction(CommandsReceiver.cmdwifi).setData(Uri.parse("custom:" + widgetID));
PendingIntent piWiFi = PendingIntent.getBroadcast(cx, 0, iWiFi, PendingIntentFLAG);
views.setOnClickPendingIntent(R.id.cmdwifi, piWiFi);
Intent iBT = new Intent(cx, CommandsReceiver.class).setAction(CommandsReceiver.cmdbt).setData(Uri.parse("custom:" + widgetID));
PendingIntent piBT = PendingIntent.getBroadcast(cx, 0, iBT, PendingIntentFLAG);
views.setOnClickPendingIntent(R.id.cmdbluetooth, piBT);
... and so on for other buttons ....
希望這有助於...
非常感謝你的詳細答案。但有人認爲:每15分鐘更新一次,我有點害怕記憶力衰退,你有什麼經驗,你不必擔心嗎? –
內存泄漏是錯誤代碼造成的,而不是更新時間。只要你的代碼有效率和小,你沒有什麼可擔心的。如果您的小部件在用戶與它交互時有許多事情要做,那麼您必須使用服務,但這完全是另一回事。在用戶按下按鈕的情況下,如果您正在更改某些視圖的可見性,則可以使用15分鐘的方法進行操作。沒必要擔心小部件的更新時間,但最常見的小部件是那些時鐘每分鐘更新一次而沒有明顯資源消耗的小部件。 – Christos