我对Android处理活动的方式感到有些困惑。 我参与了一个包含3个主要活动的项目:
如果我在C和OnDestroyed()被调用,例如因为方向改变,B也被破坏了吗?当我回到B时,我会在同一点获得相同的列表吗?
如果B因为资源不足而被隐藏,并且再次调用onCreate(),我该如何恢复整个列表?如何在不向服务器再次请求的情况下恢复列表?
答案 0 :(得分:2)
如果我在C并且OnDestroyed()被调用,例如因为方向改变,B也被破坏了吗?
没有。当活动B启动活动C时,活动B停止并继续返回到后端堆栈 - 因为它不再可见,因此方向的概念在此时无关紧要。换句话说,活动B被冻结了#39;在以前的状态。销毁和重新创建可见活动(在本例中为活动C)的唯一原因是,不同方向的活动的外观/行为可能会略有不同,因此破坏/重新创建可见活动是确保最简洁的方法。一个新的开始。
当我回到B时,我会在同一点获得相同的列表吗?
这取决于。想象一下以下两种情况......
情景1
场景2
如果由于资源不足而隐藏B被摧毁......
极不可能
...再次调用onCreate(),如何恢复整个列表?如何在不向服务器再次请求的情况下恢复列表?
正如我在场景2中所述,每当活动B被销毁/重新创建时,它将经历整个生命周期 - 如果包括从服务器下载列表那么将会发生什么。但是,有一些方法,例如使用onSaveInstanceState()
或者只是在本地某处缓存列表数据并从缓存重新加载。
答案 1 :(得分:1)
您可以考虑在列表+详细信息页面中使用片段。对于屏幕旋转持久性,您可以在onSaveInstanceState中保存任何重要信息。关于来自服务器的数据,最佳做法是使用SQLite或任何库(如Realm.io)将数据保存在本地设备数据库中。
所以你的项目应该包括:
登录活动
应用程序的主要活动,它将管理2个片段,一个用于列表数据,一个用于详细信息页面。
如果您不希望数据在设备上保留,则从列表片段下载后,您可以将数据保存在MainActivity中,而不会被杀死。
答案 2 :(得分:0)
你应该使用onSaveInstanceState来保存状态并从onCreate通过savedInstanceState恢复,详见
http://developer.android.com/training/basics/activity-lifecycle/recreating.html