我应该在长时间运行的AsyncTask中使用getApplicationContext或Activity.this

我有一个长时间运行asynchronous任务发送一些数据到我的服务器,然后停止。 整个过程可能涉及一些要求和回应。 我必须从数据库读取数据,发送并处理响应,并相应地更新我的数据库。 我正在使用内容提供程序从数据库中读取和更新数据。

现在要使用Content Provider,我必须在上下文中调用getContentResolver()方法。 所以我想知道我是否必须使用getApplicationContext或只是将Activity.this传递给我的方法。

我看到一些这样的post解释了两者之间的差异,并且在大多数情况下,他们build议我们尽可能不使用getApplicationContext 。 虽然我不希望我的AsyncTaskActivity被销毁或方向改变时从Activity.this丢失上下文。 所以我想知道如果我可以使用getApplicationContext在我的情况下,或将使用Activity.this符合我的要求。

有一个理由来使用每个选项。

当您使用上下文来修改UI时, 应该使用Activity上下文,因为在某些情况下,使用应用程序上下文可能会导致exception( 如此处和此处所述 )。 如在以下情况下:

 TextView senderNameTextView = new TextView(getApplicationContext()); 

在跨活动使用中使用上下文时,不应将Activity上下文绑定到该操作,因为即使该活动已被销毁,它也不会被垃圾收集,因为它仍从正在运行的任务中引用。 在这些情况下,您应该使用应用程序上下文。 请参阅Android开发人员网站 (由Romain Guy撰写)中的文章以获取更多详细信息。

如果只使用上下文来调用getContentResolver ,则应该使用Application上下文。