如何在此方案中管理活动实例重新生成?

时间:2011-10-06 12:56:19

标签: android android-activity

我对Android比较陌生,而且我正试图从iOS上移植一个应用程序,这有点不同寻常。

我的应用程序有一个内部xml语言来表示GUI(iOS中我们自己的nib / xib的类型或者android中的res / layout / whatever.xml,相信我,我们别无选择),以及一个通胀机制膨胀此xml并构建视图控制器和视图实例。

因此,在iOS中,我的应用程序有几个相同类的实时UIViewController实例(根据需要在导航堆栈中添加和删除),这些实例都被充气一次(来自不同的XML)并且只要应用程序保持活动状态是

现在,我对在Android中执行此操作的正确方法有点不确定。理想情况下,我希望能够创建一个Activity类的实例,每个实例的视图都从我们的xml语言中膨胀,然后在它们之间进行导航。但是,根据我的理解,这在Android中是不可能的(因为活动是由意图启动的,并且是由类创建的)。

  1. 我是不是能够保持活动并且同时 - 不在堆栈上(即“后退”总是杀死活动)?
  2. 如果是这样,这是否意味着我需要从xml中提升活动及其所有观点,每次我“向前”(严重的性能问题),还是有替代方案?
  3. 至少将解析后的xml结构保存在Application子类中是否合理,所以通胀会更快?
  4. 仅将(在创建时)发送并保存(用于持久性)活动标识符到新活动实例,并将其转到我的Application子类,并通过标识符自动/获取其状态是否有意义?
  5. 一般来说,假设从XML中扩展GUI是必须的,并且我希望最小化重新扩展GUI的需要,您认为最干净的解决方案是什么?

    任何其他提示将不胜感激...谢谢!

1 个答案:

答案 0 :(得分:1)

我不是100%确定我理解你的情况 - 我认为你说的是​​你有自定义XML来定义你的布局和控制器。我将基于此回答,如果我错了,请纠正我。

首先,您的问题表明您了解当前的道路上遇到的问题。我不打算单独回答它们因为我认为有更好的解决方案 - 通过the compatibility package使用碎片。

Fragments的工作方式是你有一个Activity,然后是一系列定义UI的片段。对于手机,这最终看起来与基于活动的应用程序相同。但在你的情况下,它会提供一些奖金:

  • 可以在代码中动态创建片段。

  • 碎片可以从堆栈弹出,但保存在内存中,以便以后重新添加。

  • 您可以将所有预先解析的XML存储在保留的,不可见的Fragment实例中(而不是全局Application子类)。

这并不是说碎片没有问题 - 也可能存在限制(我最近才开始使用它们)。但我会看看他们是否可以解决你的问题。

另一种选择是在内部XML和Android的XML之间编写转换(预处理)。 Android的XML View创建非常快,因为它针对它进行了优化。