【问题标题】:Activities - Sharing data (singleton data class)活动 - 共享数据(单例数据类)
【发布时间】:2013-01-16 14:00:21
【问题描述】:

我正在构建一个新的 android 应用程序,它通过不同的活动使用来自服务器的数据。

目前我有 2 个活动,主要的活动连接到服务器并使用来自服务器的数据创建单例对象(所有活动共享)。

显然我有一个数据的实例保存在单例类中,并从静态方法中获取对象。

我知道这不是在活动之间实现共享数据的最佳方式 - 我可以通过意图传递它们(但我计划创建更多使用相同数据的 3-4 个活动,所以为什么要在何时传递它们?您可以将它们放在应用程序全局的静态上下文中)。

这个实现让我陷入了这个问题: 当用户在第二个活动中切换到另一个应用程序,并且我的应用程序在后台停留了一段时间时,android 会释放应用程序使用的内存,当返回到它时,在使用其中一个字段时出现空指针异常单例对象!

我通过返回主活动(如果对象为空)来重新创建数据来解决问题,但这会使活动在每次被销毁时重新连接(这不是最佳的,因为服务器上的数据没有太大变化)。 我知道我必须保存服务器数据 onDestroy 并在每次返回活动时重新创建对象,但这必须发生在每个活动上,数据大约 4-5KB 意味着它需要写入文件,并且解析需要时间(访问手机SD卡)。

我开始考虑使用 Parcelable 对象通过 Intent 共享数据 - 我认为 android 可以自动以最佳方式保存和恢复 Intent 的数据。 (参考:http://bimbim.in/post/2010/09/27/Android-Passing-object-from-one-activity-to-another.aspx

问题是,意图会解决我的问题吗? 还有其他方法吗?更好、更快的方法?

谢谢!

【问题讨论】:

    标签: android memory-management android-activity nullpointerexception


    【解决方案1】:

    我确信问题与活动的生命周期有关。当 Android 杀死你的 Activity 时,你可以使用主 Activity 的 onRestoreInstanceState() 方法将数据保存为一个包,因此当再次重新创建 Activity 时,你可以通过 Activity 的 onCreate() 方法恢复数据(参见 here 为一个例子)。您还可以在活动的onResume()onPause() 方法中使用SharedPreferences。使用这两种方法,想法是相同的:您将对象/数据临时保存在磁盘上,稍后再恢复。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-27
      • 1970-01-01
      • 1970-01-01
      • 2013-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多