2012-02-03 37 views
41

我有一個長時間運行的異步任務,它將一些數據發送到我的服務器,然後停止。整個過程可能涉及一些請求和響應。我必須從數據庫讀取數據,發送它並處理響應並相應地更新我的數據庫。我正在使用內容提供程序從數據庫中讀取和更新數據。我應該在長時間運行的AsyncTask中使用getApplicationContext或Activity.this

現在要使用Content Provider,我必須調用getContentResolver()上下文方法。所以我想知道我是否必須使用getApplicationContext或只是將Activity.this傳遞給我的方法。

我看到幾個帖子like this解釋了兩者之間的差異,並在他們中的大多數,他們建議我們不要使用getApplicationContext如果可能的話。雖然我不希望我的AsyncTaskActivity銷燬或方向更改時丟失Activity.this的上下文。所以我想知道我是否可以使用getApplicationContext或使用Activity.this符合我的要求。

回答

84

有一個理由使用每個選項。

當你以修改UI使用的情況下,你應該使用應用上下文可能會導致異常(as described herehere)使用的活動範圍內,因爲在某些情況下。比如在下面的情況:

TextView senderNameTextView = new TextView(getApplicationContext()); 

當你正在使用的上下文交叉活動使用,你不應該綁定活動方面的作用,因爲那麼即使活性被破壞,也不會垃圾收集,因爲它仍然從正在運行的任務引用。在這些情況下,您應該使用應用程序上下文。有關更多詳細信息,請參閱the article in Android Developer's site(由Romain Guy撰寫)。

如果您僅使用上下文來調用getContentResolver,則應使用Application上下文。

+0

非常感謝'如此處所述'。 – 2016-03-31 09:19:28

相關問題