我有一个长时间运行的异步任务,它将一些数据发送到我的服务器,然后停止。整个过程可能涉及一些请求和响应。我必须从数据库读取数据,发送数据并处理响应并相应地更新我的数据库。我正在使用内容提供程序从数据库读取和更新数据。
现在要使用内容提供程序,我必须调用getContentResolver()
上下文方法。所以我想知道我是否必须使用getApplicationContext
或者只是通过Activity.this
按照我的方法。
我看了几个帖子像这样 https://stackoverflow.com/questions/1026973/android-whats-the-difference-between-the-various-methods-to-get-a-context解释两者之间的区别,在大多数情况下,他们建议我们不要使用getApplicationContext
如果可能的话。虽然我不想要我的AsyncTask
失去上下文Activity.this
当。。。的时候Activity
被破坏或方向改变时。所以我想知道我是否可以使用getApplicationContext
就我而言或将使用Activity.this
符合我的要求。
使用每个选项都有一个原因。
当您使用上下文来修改 UI 时,您should使用 Activity 上下文,因为在某些情况下使用应用程序上下文可能会导致异常(如此处所述 http://androidforbeginners.blogspot.com/2009/12/context.html and here https://stackoverflow.com/questions/4851394/getapplicationcontext-throws-an-exception-when-used)。比如下面这种情况:
TextView senderNameTextView = new TextView(getApplicationContext());
当您在跨活动使用中使用上下文时,不应将活动上下文绑定到操作,因为这样即使活动被销毁,它也不会被垃圾收集,因为它仍然被正在运行的任务引用。在这些情况下,您应该使用应用程序上下文。看Android 开发者网站中的文章 http://android-developers.blogspot.com/2009/01/avoiding-memory-leaks.html(由罗曼·盖伊 https://stackoverflow.com/users/298575/romain-guy)了解更多详细信息。
如果您仅使用上下文来调用getContentResolver
,您应该使用应用程序上下文。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)