2015-09-28 109 views
3

我的应用程序在Android服务中使用LocationListener来更新频繁位置。应用程序具有一些与共享首选项相关的位置过滤器相关数据要求是尽可能频繁地获取位置更新。 我从侦听器的onLocationChanged中的Shared Preference中检索数据。 这是我的代码是否重复使用Android Shared Preference存储会影响性能?

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

如果该值丢失,只需将if(sharedPreferences == null)初始化即可。 –

回答

5

使用上面的代码sharedPreference以重复的方式使用。我只想知道这是不是好的做法?

重复访问SharedPreferences是没有问题的。但是在你的情况下,每当事件发生时你都要重新初始化sharedPreferences。您应该在您的活动的onCreate或您的片段的onCreateView中这样做一次。

同样适用于filterOne。如果该值恒定不变,因为它不会改变,您只应在onLocationChanged呼叫之外检索一次。


因此,要回答你的问题

是重复使用的Android共享偏好的存储使对性能的影响?

是的,但只是因为你每次都重新初始化它。如果你遵循我的建议,那么对性能几乎没有影响。

+1

太多的人会错过重新初始化对象的影响,很好的答案! – Ewald

+0

@Tim Castelijns,我尝试将它放置在onCreate上,但是当服务重新启动时,这些值将丢失。 –

+0

@AMY,如果您使用的是服务,则适用相同的逻辑,但是您应该将其置于服务的“onCreate”或其“onBind”方法中 –

相关问题