2015-09-28 104 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」方法中 –

相關問題