【发布时间】:2015-05-24 02:27:42
【问题描述】:
情景
我有一个使用用户设置的请求列表的类。请求列表存储在 SharedPreferences 中。我面临的困境是每次需要请求列表时是保留请求列表的实例还是从 SharedPreferences 读取(这非常频繁)。
也不是说 Gson 是用来反序列化对象的。
代码如下:
public List<PrayerTimesCalculator.Time> getDefaultRequestList() {
if (mRequestList != null) return mRequestList;
// Try getting request list from preferences;
Gson gson = new Gson();
String json = mSharedPref.getString(KEY_PREF_REQUEST_LIST, null);
Type listType = new TypeToken<List<Time>>() {
}.getType();
mRequestList = gson.fromJson(json, listType);
if (mRequestList != null) return mRequestList;
// Create default list;
mRequestList = Arrays.asList(
Time.DAWN,
Time.MORNING,
Time.AFTERNOON,
Time.EVENING,
Time.MID_NIGHT);
return mRequestList;
}
目标
我担心的是,如果我保留请求列表的一个实例,并且该类有多个实例,则该类的一个实例中对请求列表的更新将不会反映在其余实例中,直到它们被重新创建。
因此,我倾向于从 SharedPreferences 中读取数据,除非有更好的方法可以在所有情况下保持更新被反对的请求列表。
问题
(1) 那么,对象的多个实例频繁地从 SharedPreferences 中读取同一个键的效率如何? (2) 有没有更好的方法让被反对的请求列表在所有情况下都保持更新?
【问题讨论】:
-
如果不需要持久化请求数据,可以只创建一个单例类或者使用静态变量来存储。
-
您如何显示您的列表项?如果您使用的是适配器,您可以像之前评论者建议的那样将您的列表设为静态或单例,然后执行 notifyDataSetChanged() 来更新您的视图。
-
@xwhyLikeThis 是的,我在考虑单例。但是由于围绕单例设计模式的争议而犹豫不决。 stackoverflow.com/questions/137975/…
-
@fahmy ...我只知道有这样一个关于单例的讨论。我个人认为单例非常好用,每个 Java 开发者都知道这样的模式,它可以解决问题,并且与 sharedPreference 相比,它具有更好的性能,那为什么不呢?无论如何,您也可以只使用静态变量。
标签: android performance sharedpreferences