1

我希望您能帮助我了解 Android 生命周期以及如何管理多种活动之间的导航。假设以下场景:

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

我想将所有活动保存在静态管理器中。如果一个活动已启动,管理器会查看它之前是否已经启动过。如果是这样,则恢复上一个活动,否则 startActivity(ActivityA)。这是处理这些导航的好方法吗?如何通过代码直接恢复活动实例?还是有另一种更好的方法来做到这一点?

提前致谢!问候,法科

4

3 回答 3

1

一旦离开堆栈,您将无法“缓存”活动。活动很快就开始了,我猜是你的数据库东西让你慢了下来。你可以做点什么。

理论上,如果您知道用户要从 A -> B 多次单击条目,您可能只想将 DB 内容加载到 Activity A 的内存中,然后通过 Parcel 将其发送到 B。 然后当您回到A,它还在记忆中,它会立即回到B。

如果您不确定这是否属实,请尝试调试它并逐步执行。您将看到活动启动得相当快,但您需要确定哪些操作滞后。根据您上面的描述,它可能是您的数据库调用,但也可能是其他东西,例如网络调用或其他长期存在的调用

于 2013-02-19T14:45:53.333 回答
0

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

使信息持久化的一种选择是扩展 Application 类并将信息保存到应用程序类中的一些变量中。尽管如果系统需要内存,即使在那时你所做的很多事情都可以被垃圾收集。即使使用 Jameo 的解决方案,我不相信有任何好的方法可以让这些信息在活动中持续存在,如果活动 A 被终止,那么如果你从活动 B 返回到活动 A,那么该活动将重新加载,并且数据库访问必须再次发生。

于 2013-02-19T14:52:25.023 回答
0

android Activity 的生命周期使得它不可能启动一个新的 Intent 而是保持旧的状态。

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

于 2013-02-19T14:39:31.947 回答