我正在开发一个 Android 应用程序,当数据来自使用相同额外内容的相同 Activity 时,我希望避免重新加载类似数据。
具体来说,当我使用 extra 启动 Activity 'A' 时,我使用这个 extra 从服务器加载远程数据。
通过此活动,我可以使用不同的额外内容重新启动“A”等等。
例子 :
A:id1 --> A:id2 --> A:id3
但是,它也可以是我已经加载的额外内容:
A:id1--> A:id2 --> A:id3 -->A:id1
在这种情况下,我不会再次请求服务器或丢失活动堆栈。
据我了解,“onSaveInstanceState”允许保存一个活动的一个实例,但就我而言,它是同一活动的多个实例(具有不同的额外内容)。
那么,它是管理同一 Activity 的已保存实例状态(捆绑包)列表的解决方案吗?或者是其他东西 ?
提前致谢
The onSaveInstanceState
方法未按照您描述的方式使用。看一下这个, http://developer.android.com/reference/android/app/Activity.html它是活动类的文档,特别是活动生命周期部分。onSaveInstanceState
是当操作系统由于某种原因必须终止 Activity 时调用的方法。它允许您填充一个 Bundle,这将有助于重新创建用户停止的 Activity 的特定实例。通常会发生这种情况,因为用户切换到不同的应用程序,并且操作系统正在终止 Activity 以回收内存,但也会发生在屏幕旋转时,因此至少要注意平台的细微差别,这一点很重要。
至于你的问题,我要做的是使用数据库来存储从服务器检索的信息。当你启动一个Activity时,你可以首先检查数据库中是否存在需要填充该Activity的数据。如果是,则从那里加载并显示它,否则调用服务器。
这很好,因为数据将在应用程序的多次使用中保持不变。更进一步,如果来自服务器的数据可能已过时,您可以轻松扩展它以最初显示数据库中的数据,并启动对数据的异步请求,该数据将在返回时更新 UI 和数据库。您的用户几乎永远不会处于等待加载内容的状态,这总是一件好事!
这是关于实现 sqlite 数据库基础知识的一个很好的教程。 http://www.drdobbs.com/database/using-sqlite-on-android/232900584这还将给您带来额外的好处,即在应用程序的单独运行中保存数据。
作为替代方案,如果您并不真正需要数据库的持久性或其他功能,并且认为开销不值得,您可以创建一个 Singleton 类来跟踪返回的数据,也许可以实现它使用应用类 http://developer.android.com/reference/android/app/Application.html。重要的是要注意(并让我们回到原点)任何存储此数据的内存方法都应该使用onSaveInstanceState
以确保如果 Activity 在意外时间被终止,您不会丢失任何数据。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)