Android活动处理(恢复/重启)

时间:2013-02-19 14:36:12

标签: android navigation android-activity xamarin.android

我希望您可以帮助我了解Android生命周期以及如何在活动之间管理多种类型之间的导航。假设以下情形:

  • 活动启动“MainMenu”:用户点击菜单栏
  • 启动活动B并使用本地数据库中的内容加载UI
  • 用户与活动B互动
  • 用户按Backbutton并返回活动A
  • 用户再次按下相同的菜单项以返回活动B
  • 目前:活动是从头开始加载的
  • Whished:活动B的上一个实例及其所有UI条目和用户交互应该恢复

我想过将所有活动保存在静态管理器中。如果活动已启动,则经理会查看之前是否已启动。如果是,请恢复上一个活动,否则启动startActivity(ActivityA)。这是处理这些导航的好方法吗?如何通过代码直接恢复活动的实例? 或者还有另一种方法可以更好地完成这项工作吗?

提前致谢! 问候, faiko

3 个答案:

答案 0 :(得分:1)

一旦活动离开堆栈,您将无法“缓存”活动。活动开始非常快,我猜你的数据库那些让你失望的东西。您可以做些什么。

理论上,如果你知道用户要多次从A - >点击条目。 B,您可能只想在活动A中将数据库内容加载到内存中,然后发送它via Parcel into B.然后当您返回到A时,它仍然在内存中,它将立即返回到B.

如果您不确定这是否属实,请尝试调试并单步执行。您将看到活动很快启动,但您需要确定哪些操作滞后。从上面的描述可能是你的数据库调用,但它可能是其他的东西,如网络电话或其他长期电话

答案 1 :(得分:0)

Android活动的生命周期使得无法启动新意图但保持旧状态。

您应该通过保存字段来保存活动的状态,并在需要时将其恢复到此状态。

答案 2 :(得分:0)

您无法在已发布的方案中恢复活动的实例。因为由于android生命周期,当您按活动B上的后退按钮时,活动被销毁,包含其所有状态和信息。

获取信息的一个选项是扩展Application类并将信息保存到应用程序类中的一些变量中。虽然如果系统需要内存,你可以做很多垃圾收集。我不相信即使使用Jameo的解决方案也有任何好的方法可以使活动持续存在,如果活动A被杀死,那么如果从活动B返回活动A,则重新加载该活动并且数据库访问必须再次发生。