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

时间:2012-02-03 01:39:10

标签: android

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

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

我看到一些帖子like this解释了两者之间的区别,在大多数帖子中,他们建议我们尽可能不使用getApplicationContext。虽然我不希望AsyncTaskActivity.this被销毁或方向发生变化时从Activity丢失上下文。所以我想知道我是否可以在我的案例中使用getApplicationContext,或者使用Activity.this符合我的要求。

1 个答案:

答案 0 :(得分:85)

有理由使用每个选项。

当您使用上下文来修改UI时,应该使用Activity上下文,因为在某些情况下使用应用程序上下文可能会导致异常(as described here和{ {3}})。例如在以下情况中:

TextView senderNameTextView = new TextView(getApplicationContext());

在交叉活动使用中使用上下文时,不应将Activity上下文绑定到操作,因为即使活动被销毁,也不会被垃圾收集,因为它仍然是从运行任务。在这些情况下,您应该使用Application上下文。有关更多详细信息,请参阅here(由the article in Android Developer's site撰写)。

如果您只使用上下文来调用getContentResolver,则应使用应用程序上下文。