2017-03-03 61 views
1

實際上我正在開發一個android應用程序,其中Activity和Widget ListView通過AsyncTask進行填充。這是我目前的實現AsyncTask最佳實踐:更新和過濾活動和小部件ListView on fcm

AsyncTask- AsyncTask從url中獲取json(如果可用互聯網從資產Jason文件讀取)並通過ArrayAdapter與模型填充ListView。

MainActivity- 的AsyncTask從MainActivity

的onCreate方法

小窗口 WidgetProvider也使用這個的AsyncTask類填充的ListView執行。

FCMMESSAGINGSERVICE- 它將意向發送給MainActivity,MainActivity將處理此意圖並再次執行AsyncTask。

一切工作都很好,按要求完善。但我想知道,這種情況可以通過更好的方式來實現...

Like: 在fcm通知上,某種datachanged方法將直接填充更新/修改的ListView for MainActivity以及WidgetProvider 。

這裏還有一件事我想知道,這個ListView有一些過濾器可以通過SettingsActivity進行更改。目前,用戶已重新啓動應用程序,以在過濾器更改後重新執行AsyncTask。如果設置更新,我不知道如何直接操作ListView。

感謝&問候

回答

0

個人而言,我不認爲你的做法是不正確。

我認爲有必要對您進行一項更改:不要從FcmMessagingService開始MainActivity,而應創建一個通知,點擊該通知後,會啓動MainActivity。這對用戶來說會更好,而不是無處不在。

關於設置更新,您需要爲首選項值更改時實現偵聽器。 This question有一個很好的例子:

// Use instance field for listener 
// It will not be gc'd as long as this instance is kept referenced 
listener = new SharedPreferences.OnSharedPreferenceChangeListener() { 
    public void onSharedPreferenceChanged(SharedPreferences prefs, String key) { 
    // Implementation 
    } 
}; 

prefs.registerOnSharedPreferenceChangeListener(listener); 
+1

感謝@BMacedo爲您提供寶貴的時間和關於fcm的建議。就我個人而言,我也認爲這種方法沒問題,但尋求一些好的方法。在將您的答案標爲正確之前,讓我檢查一下其他選項(答案和評論)。 –