活动 - 共享数据(单例数据类)

时间:2013-01-16 14:00:21

标签: android memory-management android-activity nullpointerexception

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

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

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

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

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

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

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

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

感谢名单!

1 个答案:

答案 0 :(得分:1)

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