Android的Shared Preference存储的重复使用会影响性能吗?

4

我的应用程序在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外面,但是当服务重新启动时,这些值会丢失并被设置为零。

我只想知道这是否是一个好的实践方式?我是否应该使用其他选项?


如果值丢失了,只需放置if(sharedPreferences == null),然后初始化它。 - Stephane Mathis
1个回答

5
在重复使用中访问SharedPreferences没有问题。但是在你的情况下,每次事件触发时都会重新初始化sharedPreferences。你应该只在activity的onCreate或fragment的onCreateView中进行一次初始化。
同样适用于filterOne。如果该值是恒定不变的,那么你应该在onLocationChanged之外仅检索一次。
因此,回答你的问题:Android Shared Preference存储的重复使用会对性能产生影响吗?
是的,但只因为你每次都重新初始化它。如果你遵循我的建议,将几乎不会对性能产生影响。

1
很多人忽略了初始化可重复使用的对象的影响,好答案! - Ewald
@Tim Castelijns,我尝试将其放置在onCreate中,但是当服务重新启动时,这些值会丢失。 - Amol Patil
@AMY,如果你正在使用一个服务,同样的逻辑也适用,但是你应该将它放在服务的onCreate或者onBind方法中。 - Tim
@Tim Castelijns的问题是当应用程序关闭时服务被重启,所有过滤变量都被设置为零,onCreate和onStartCommand没有被调用。请协助解决。 - Amol Patil
@AMY 你可以在 onBind() 中进行初始化,并在应用程序恢复/重新启动时重新绑定到服务。 - Tim
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接