具有不同生命周期的不同Android应用程序组件如何共享对象?

时间:2014-05-09 23:49:49

标签: android android-activity android-lifecycle android-broadcast

我是Android开发的新手,我发现有不同的组件(活动,服务等),每个组件都有不同的生命周期。

我遇到的情况是我有一个应该由不同组件访问的对象。也就是说,我有一个动态变化的对象列表,该列表应该通过以下方式访问:

  1. 在ListView中显示列表的活动
  2. 广播接收器,响应AlarmManager中安排的警报事件。
  3. 广播接收器可能会在使用活动后数小时内启动。此时,活动可能会或可能不会在记忆中存活。

    我可以在任何地方放置列表,以便所有应用程序部分都可以访问它吗?我的想法是序列化我需要共享的对象,将它们写入共享首选项,然后在需要时重新创建它们。我不确定这是一个好主意,即使它是 - 我将如何设计它?什么时候会写共享偏好(或其他地方)?何时会发生阅读(如果可能,最好从内存中读取对象)?

3 个答案:

答案 0 :(得分:1)

如果它是兼容的数据类型,您可以将它放在SharedPreferences中,或者将列表序列化为内部或外部存储中的文件(请参阅saving files,您可能希望根据您的情况使用内部存储)。

您可以在Activity的onResume()方法或接收器的onReceive()方法中读取列表。只要需要将新元素添加到列表中,就会发生写入,您将反序列化列表,添加元素并重新序列化。您可能需要将读取和写入放在同步块或方法中以防止同时访问。

如果在恢复活动时可以将列表添加到活动外部,则可能需要提供广播接收器或其他机制以便更改活动并重新加载列表。

正如Gabe指出的那样,你可以将它存储在某个地方的静态变量中,但是你描述情境序列化的方式听起来似乎是一个更好的选择。否则,如果您的流程被Android系统终止,则列表将消失。

正如kcoppock指出的那样,你可以使用SQLite数据库来存储数据,但这听起来像你所描述的那样过于苛刻。您将获得一些额外的编码而没有太大的好处。

答案 1 :(得分:0)

您要找的是Android Shared Preferences。您可以使用活动或服务中的 getApplicationContext()访问Sharedpreferences。

希望这有帮助

答案 2 :(得分:0)

如果你不想永久存储它,把它放在一个静态变量的某个地方(他们都同意的地方 - 一个单独的类是个好主意)。然后你可以访问该列表,除非Android将内存从内存中删除 - 由于内存不足,它应该只停止应用程序,在这种情况下它无论如何都不重要。

如果您希望永久存储它,文件系统是最好的方法。当然,您需要同步访问它。