对Android处理活动的方式感到困惑

时间:2015-02-19 22:08:48

标签: android android-listview android-lifecycle

我对Android处理活动的方式感到有些困惑。 我参与了一个包含3个主要活动的项目:

  • A.-飞溅/欢迎屏幕
  • B.-关于新闻的列表视图
  • C.-当用户触摸列表视图中的新内容时显示的新闻描述

如果我在C和OnDestroyed()被调用,例如因为方向改变,B也被破坏了吗?当我回到B时,我会在同一点获得相同的列表吗?

如果B因为资源不足而被隐藏,并且再次调用onCreate(),我该如何恢复整个列表?如何在不向服务器再次请求的情况下恢复列表?

3 个答案:

答案 0 :(得分:2)

  

如果我在C并且OnDestroyed()被调用,例如因为方向改变,B也被破坏了吗?

没有。当活动B启动活动C时,活动B停止并继续返回到后端堆栈 - 因为它不再可见,因此方向的概念在此时无关紧要。换句话说,活动B被冻结了#39;在以前的状态。销毁和重新创建可见活动(在本例中为活动C)的唯一原因是,不同方向的活动的外观/行为可能会略有不同,因此破坏/重新创建可见活动是确保最简洁的方法。一个新的开始。

  

当我回到B时,我会在同一点获得相同的列表吗?

这取决于。想象一下以下两种情况......

情景1

  • 在纵向中,活动B启动活动C
  • 用户将手机转为横向。
  • 销毁/重新创建活动C.后筹码上的所有其他活动不受影响
  • 用户将手机转回肖像
  • 活动C再次被销毁/重新创建
  • 用户按下BACK按钮,活动C被永久销毁
  • 活动B重新启动并经历重启/开始/恢复生命周期阶段,并重新显示完所有数据,并说明以前的状态。

场景2

  • 在纵向中,活动B启动活动C
  • 用户将手机转为横向。
  • 销毁/重新创建活动C.后筹码上的所有其他活动不受影响
  • 用户按下BACK按钮,活动C被永久销毁
  • 由于手机处于横向状态,因此活动B会以纵向模式重新出现,因为手机处于横向
  • 由于方向的改变,活动B在景观中被破坏/重建。这导致它经历创建,开始,恢复。任何先前的数据/状态显然都会丢失。
  

如果由于资源不足而隐藏B被摧毁......

极不可能

  

...再次调用onCreate(),如何恢复整个列表?如何在不向服务器再次请求的情况下恢复列表?

正如我在场景2中所述,每当活动B被销毁/重新创建时,它将经历整个生命周期 - 如果包括从服务器下载列表那么将会发生什么。但是,有一些方法,例如使用onSaveInstanceState()或者只是在本地某处缓存列表数据并从缓存重新加载。

答案 1 :(得分:1)

您可以考虑在列表+详细信息页面中使用片段。对于屏幕旋转持久性,您可以在onSaveInstanceState中保存任何重要信息。关于来自服务器的数据,最佳做法是使用SQLite或任何库(如Realm.io)将数据保存在本地设备数据库中。

所以你的项目应该包括:

  1. 登录活动

  2. 应用程序的主要活动,它将管理2个片段,一个用于列表数据,一个用于详细信息页面。

  3. 如果您不希望数据在设备上保留,则从列表片段下载后,您可以将数据保存在MainActivity中,而不会被杀死。

答案 2 :(得分:0)

你应该使用onSaveInstanceState来保存状态并从onCreate通过savedInstanceState恢复,详见

http://developer.android.com/training/basics/activity-lifecycle/recreating.html