在长时间运行的AsyncTask中,我应该使用getApplicationContext还是Activity.this?

41
我有一个长时间运行的异步任务,将一些数据发送到我的服务器然后停止。整个过程可能涉及几个请求和响应。我必须从数据库中读取数据,发送它,处理响应并相应地更新我的数据库。我正在使用内容提供程序从数据库中读取和更新数据。
要使用内容提供程序,我必须在上下文中调用getContentResolver()方法。所以我想知道是否需要使用getApplicationContext或者只需向我的方法传递Activity.this
我看到了一些帖子(如这个),解释了两者之间的区别,大多数建议如果可能的话不要使用getApplicationContext。虽然我不想让我的AsyncTaskActivity被销毁或方向更改时丢失Activity.this上下文。因此,我想知道在我的情况下是否可以使用getApplicationContext,或者使用Activity.this是否符合我的要求。
1个回答

85

每个选项都有其使用的原因。

当您在使用上下文来修改UI时,应该使用Activity上下文,因为在某些情况下使用应用程序上下文可能会导致异常(如此描述这里)。例如,在以下情况下:

TextView senderNameTextView = new TextView(getApplicationContext());

当您在跨活动使用上下文时,不应将Activity上下文绑定到操作,因为即使活动被销毁,它仍然从正在运行的任务中引用,因此不会被垃圾回收。在这些情况下,您应该使用Application上下文。请参见Android开发者网站(由Romain Guy编写)以获取更多详细信息。
如果您只是使用上下文调用getContentResolver,则应使用Application上下文。

1
感谢您提供的“如此描述”信息。 - Chirag Savsani

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接