我有一个长时间运行的异步任务,它将一些数据发送到我的服务器,然后停止。整个过程可能涉及一些请求和响应。我必须从数据库中读取数据,发送它并处理响应并相应地更新我的数据库。我正在使用内容提供程序来读取和更新数据库中的数据。
现在要使用Content Provider,我必须在上下文中调用getContentResolver()
方法。所以我想知道我是否必须使用getApplicationContext
或者只是将Activity.this
传递给我的方法。
我看到一些帖子like this解释了两者之间的区别,在大多数帖子中,他们建议我们尽可能不使用getApplicationContext
。虽然我不希望AsyncTask
在Activity.this
被销毁或方向发生变化时从Activity
丢失上下文。所以我想知道我是否可以在我的案例中使用getApplicationContext
,或者使用Activity.this
符合我的要求。
答案 0 :(得分:85)
有理由使用每个选项。
当您使用上下文来修改UI时,应该使用Activity上下文,因为在某些情况下使用应用程序上下文可能会导致异常(as described here和{ {3}})。例如在以下情况中:
TextView senderNameTextView = new TextView(getApplicationContext());
在交叉活动使用中使用上下文时,不应将Activity上下文绑定到操作,因为即使活动被销毁,也不会被垃圾收集,因为它仍然是从运行任务。在这些情况下,您应该使用Application上下文。有关更多详细信息,请参阅here(由the article in Android Developer's site撰写)。
如果您只使用上下文来调用getContentResolver
,则应使用应用程序上下文。