2013-03-25 109 views
3

我有两个活动 - 活动A开始活动B.然后活动B从数据库加载一些东西,并可视化数据。需要一段时间(5-10秒)才能完全初始化B中的所有内容。onBackPressed - 避免破坏活动

我的问题是,如果我按下B中的按钮,它会销毁B活动(调用onDestroy)并返回到活动A。想要返回到活动A,但是没有破坏B,因为如果我再次启动B,我必须等待它再做所有的事情(这很烦人)。这可能以某种方式吗?

感谢您的帮助!

回答

5

您可以使用Fragment s,但您真正想要做的是缓存信息。否则,无论如何您都会重新加载设备旋转(除非您使用Fragment s和setRetainInstance为true,但这会导致其他问题)。

我会在活动B的onCreate上使用CursorLoaderonLoadFinished你缓存结果并设置你的用户界面。在随后的加载中,结果被缓存,并放弃加载器。更重要的是,使用CursorLoader会在底层数据库结果发生变化时提醒您。

+0

这是正确的答案,作为@Orabîg的一员,您将永远无法要求android保持活动的活力。在内存压力下,Android可以垃圾收集任何活动。 – Snicolas 2013-03-25 21:41:00

+0

+1表示片段。 – Raghunandan 2013-03-25 21:42:42

+0

谢谢,我会研究碎片。我知道我不能强制android不杀死这个活动。我只是期望平均情况下,当你回到A和几分钟后,你想再次去B ... – 2013-03-25 21:45:25

2

我觉得你不从视点右键看到问题。

我想说,如果Android想要B(因为它由它来处理活动),你不能阻止B被销毁。 但是,您可以选择将所有长时间初始化移动到可以始终保持的第三个类中。所以你应该让这个init阶段独立于你的B活动。

我认为把所有这些放在Application类的一个属性中是个好主意。

+0

谢谢,但我不想管理第三类,我暂时坚持初始化的数据,因为有更多的B实例与不同的数据(和定期的数据更新),所以它会很复杂.. – 2013-03-25 21:49:21

+0

按照你的意愿去做,但我认为你不会有很多选择。而且我不明白你的观点解释说你不能使用外部类。我希望你能为你找到最好的解决方案。 – 2013-03-25 22:35:27