2014-11-20 89 views
1

我有一個SyncAdapter重載onPerformSync。在該方法中,我想訪問sharedpreferences來獲取和放置設置。據我瞭解,爲此我需要訪問一個上下文。 SyncAdapter onPerformSync有一個bundle參數,也許我可以通過這種方式發送上下文。在沒有傳遞上下文的情況下在類中訪問sharedpreferences

在一個類似的問題,我有另一個基類(不是服務或活動),我也有興趣使用sharedPreferences。爲此,我需要將上下文傳遞給類中的方法,或者將其作爲私有成員保存的上下文實例化。

在這兩種情況下,我都明白,在與上下文關聯的活動或服務的生命週期之外保留和使用上下文可能會導致內存泄漏。

就我而言,我的應用程序可以從broadcastreceiver或主要活動開始。廣播接收機開始後臺進程,主要活動開始主要活動。首先打開的任何一個都會註冊週期性SyncAdapter更新並打開其他類。因此,如果我要傳遞調用活動或服務的上下文,如果其中一個關閉,會發生什麼? SyncAdapter或基類將使用過時的上下文,並...內存泄漏?或者上下文會恢復到任何仍在運行的狀態?

我也看到了這樣的解決方案:(Static way to get 'Context' on Android?),但會解決什麼?然後我會有一個活動上下文,一個應用程序上下文和一個服務上下文。同樣的問題對嗎? SyncAdapter最終可能會保留已關閉的上下文,否?

基於第一個答案在這裏(SharedPreferences application context vs activity context)我很想去上一個鏈接中列出的應用程序單例,但我想確保。謝謝

回答

1

我認爲你想要做的是創建一個Service來管理SyncAdapter像提到的here。這樣,傳送到ServiceContextSyncAdapter運行時應該有效。

該鏈接顯示您可以將Service.getApplicationContext()傳遞給SyncAdapter構造函數。然後,您可以將Context作爲SyncAdapter中的字段存儲,並在需要時使用它。只要你需要,Context應該是有效的。

當應用程序和/或SyncAdapter得到GC'd時,他們應該在下次需要時建立一個新的SyncAdapter並帶有新的Context

相關問題