0

在我的活動,我有大約10 ContentObservers註冊到ContentResolver (registerContentObserver)。我在onCreate()Android的內存溢出異常和ContentResolver.registerContentObserver

當在橫向和縱向之間切換時,onCreate()會一遍又一遍地被調用(並且我希望這樣 - 需要更改佈局),但經過幾次嘗試後,應用程序內存不足並崩潰。

那些觀察員不是班級成員,所以他們生活在onCreate()的範圍內。

任何想法的人?

(當我評論所有註冊時,我沒有任何崩潰)。

+0

完成後取消註冊,如果要使用,請再次註冊。 –

回答

1

註冊後,您的觀察者比onresult上下文更長,因爲它們在contentresolver中被引用。

您需要在註冊新內容之前取消註冊contentObservers。

+0

爲了更精確一點,您應該在onDestroy中取消註冊您的內容觀察者。 –

+0

在這種情況下,並不完全相同:在onDestroy結束之前,您可以在onCreate中進行多次。這意味着你應該確保你只註冊一個觀察者 – njzk2

+0

對不起,你是不正確的。每一個Activity的單個實例的onCreate總是與一個onDestroy配對,除非該進程被Android銷燬。如果是這種情況,那麼您的內容觀察員將自動取消註冊。當您旋轉手機時,會創建一個活動的新實例(調用onCreate),並將舊的實例銷燬(調用onDestroy)。 –