在不使用ContentProvider(Android)的情况下保留旋转时的Singleton DB数据

时间:2018-03-23 16:42:07

标签: android sqlite singleton

在屏幕轮换没有使用内容提供商或加载程序后,如何在活动中保留 singleton 数据库数据?

这是我难以接受的面试问题。

带有游标加载器的ContentProvider是我的第一个想法,但是他们说他们不希望这样。然后我想到保存从单例DB的查询方法返回的光标,但是我无法将光标“放”到OnSavedInstance的out包中,所以我不知道。

我还问过他们“不打算使用单例数据库吗?”他们说“是的,但这只是为了面试目的。”

也许这可以帮助将来遇到这个问题的人。

2 个答案:

答案 0 :(得分:1)

“在一个活动中”听起来我不允许将所有内容传递给应用程序类(在屏幕旋转时不会被破坏)。但万一这是一个选项:

你编写自己的类,从Application延伸。官方documentation告诉你如何做,但声明你基本上不需要。话虽如此,这个Stack Overflow post是规则可能例外的集合。

Activity中,您可以像这样访问它:

MyApplication app = (MyApplication)getApplication();

但就我个人而言,我会保留一个Activity的数据不在Application类但在保留的Fragment内。它们在配置更改后仍然存在,但请记住它们不是后端堆栈的一部分。因此,如果您有savedInstanceState!= null,则保留的Fragment可能已在其初始状态重新创建,例如如果应用程序暂停了一段时间。

Handling Configuration Changes上的指南说明了如何使用保留的Fragment

答案 1 :(得分:1)

您可以使用fragments并使用Fragment#setRetainInstance(true)。并且应该跨配置更改保存所有数据。请注意,保留的片段不会直观地放置在ActivityFragment上。这可能会对您有所帮助:https://www.androiddesignpatterns.com/2013/04/retaining-objects-across-config-changes.html