在屏幕轮换没有使用内容提供商或加载程序后,如何在活动中保留 singleton 数据库数据?
这是我难以接受的面试问题。
带有游标加载器的ContentProvider是我的第一个想法,但是他们说他们不希望这样。然后我想到保存从单例DB的查询方法返回的光标,但是我无法将光标“放”到OnSavedInstance的out包中,所以我不知道。
我还问过他们“不打算使用单例数据库吗?”他们说“是的,但这只是为了面试目的。”
也许这可以帮助将来遇到这个问题的人。
答案 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)
。并且应该跨配置更改保存所有数据。请注意,保留的片段不会直观地放置在Activity
或Fragment
上。这可能会对您有所帮助:https://www.androiddesignpatterns.com/2013/04/retaining-objects-across-config-changes.html