2017-03-03 59 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的建议。就我个人而言,我也认为这种方法没问题,但寻求一些好的方法。在将您的答案标为正确之前,让我检查一下其他选项(答案和评论)。 –