6

在我的一些應用程序中,我使用了幾個單例對象作爲「管理者」。我將它們在Application.onCreate中實例化,並將它們傳遞給ApplicationContext,我將其存儲在WeakReference中。Android Context Weak Reference

一些「經理」的方法開始從Activity被稱爲後後臺任務,所以我通過Activitycontext的方法,並保持WeakReference到以及(和使用AsyncTask的裏面)。該參考一直保留到下一次Activity調用進入後臺的方法時,WeakReference設置爲新的Activitycontext

我的問題是,ApplicationContext必須保存在WeakReference中,並且在保持Activitycontext這樣的情況時是否存在任何問題?

回答

9

WeakReference保留在活動的上下文中的原因是,您不會保留已經或應該銷燬的Activity的引用。 Application不存在此類問題。在這種情況下,不需要WeakReference

由於您沒有詳細說明您正在使用的內容,因此很難評論您對該活動的上下文的使用情況。這聽起來有點可疑,你正在交換不同的活動的上下文。如果你真的需要一個特定的活動的上下文,這可能是好的,但如果你只是想要一個有效的ContextAsyncTask使用,那麼我會考慮重新考慮你的方法。它可能會工作,但它有點hacky。根據您的需求,還有其他選擇可能更合適:IntentServiceLoaders是可供選擇的選項。

+0

我的印象是你必須在AsyncTask中使用'Activity'的'context'。我錯了嗎?有沒有'ApplicationContext'不能使用的情況?如果沒有,我寧願切換到使用'ApplicationContext'(將使我的生活更輕鬆)。 – Eliezer

+0

除了上面的內容,從我所知道的'ApplicationContext'實例化一個'View'時不應該被使用。那是對的嗎? – Eliezer

5

通常,您不必將應用程序上下文保留在WeakReference中。不過,您應該將其他類型的上下文保留在WeakReference中。

相關問題