我的应用程序在Android服务中使用LocationListener来更新频繁的位置。应用程序将一些位置过滤器相关数据存储在共享首选项要求是尽可能频繁地更新位置。 我在侦听器的onLocationChanged中从共享首选项中检索数据。 这是我的代码
public class MyLocationListener implements LocationListener {
public void onLocationChanged(final Location loc) {
sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
int filterOne = sharedPreferences.getInt("filter_data",100);
------
------
//code to process location with filter
------
------
}
}
使用上面的代码,sharedPreference以重复的方式使用。
我已经尝试在onLocationChanged之外放置过滤器变量,但是当重新启动服务时,值会丢失并设置为零。
我只是想知道这是好的做法吗? 我应该使用其他选项吗?
答案 0 :(得分:5)
使用上面的代码,sharedPreference以重复的方式使用。我只是想知道这是不是很好的做法?
以重复方式访问SharedPreferences是没有问题的。但是,在您的情况下,每次事件发生时您都会重新初始化sharedPreferences
。您应该只在活动的onCreate
或片段的onCreateView
中执行此操作。
同样适用于filterOne
。如果该值不变,就像它没有变化一样,那么您应该只在onLocationChanged
调用之外检索一次。
所以回答你的问题
重复使用Android共享首选项存储是否会影响性能?
是的,但这只是因为您每次都重新初始化它。如果你遵循我的建议,对绩效几乎没有影响。