【问题标题】:Android: Update the SQLiteOpenHelper's context property after device rotationAndroid:在设备旋转后更新 SQLiteOpenHelper 的上下文属性
【发布时间】:2012-09-10 19:13:56
【问题描述】:

我试图在AsyncTask 的帮助下将一些耗时的数据库操作放到后台线程中。为了处理可能的设备轮换,我将AsyncTask 实例保存在onRetainNonConfigurationInstance() 中并在onCreate() 中重复使用它们。到目前为止一切顺利...

但是,由于 Activity 是在设备旋转后重新创建的,所以我必须将我的 AsyncTask 中的所有 Activity 引用更新为新创建的引用。问题是,AsyncTask 中的SQLiteOpenHelper 也有一个上下文实例,它通过其构造函数传递,而我之前只是传递了旧的Activity 实例,现在如何将其更新为新的Activity

我已经测试过了,即使我不更新SQLiteOpenHelper 的上下文似乎也可以。但我仍然不确定它是否可以。

谢谢

【问题讨论】:

    标签: android multithreading sqlite rotation android-asynctask


    【解决方案1】:

    当你这样做时,你正在泄漏一个Activity 实例,因为垃圾收集器无法释放它。根据您的应用,这可能会或可能不会对您的内存使用造成致命影响,但无论如何都不好。

    您应该为您的数据库使用应用程序Context,或者创建一个ContentProvider,它有自己的上下文可供使用。

    【讨论】:

      【解决方案2】:

      您应该使用应用程序上下文 (getApplicationContext()) 而不是活动一 (this)。如果您使用活动上下文,则会泄漏

      【讨论】:

        【解决方案3】:

        我发现了一篇关于上下文和内存泄漏的令人印象深刻的文章: http://android-developers.blogspot.de/2009/01/avoiding-memory-leaks.html

        【讨论】:

          猜你喜欢
          • 2020-09-24
          • 1970-01-01
          • 1970-01-01
          • 2016-05-15
          • 1970-01-01
          • 1970-01-01
          • 2019-12-16
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多