【问题标题】:Managing life cycle of an android application管理android应用程序的生命周期
【发布时间】:2012-10-29 13:23:04
【问题描述】:

在我的 android 项目中,我有一个包含流地址列表(音乐)的类

我应该保留那个课程,这样我就不必重新填写那个列表了吗?

可能有许多不同的屏幕(活动),我会将它们推入屏幕或拉回屏幕。

在这些和屏幕变化之间(销毁活动),列表将丢失...

这个逻辑是否需要服务来保存列表?

【问题讨论】:

  • 目前实施的哪些方面不起作用?
  • 如果我把它放在我的主要活动中,我会丢失列表。 (数组对象)我应该将该对象放入服务中吗?

标签: android service android-intent


【解决方案1】:

您可以将列表存储在静态单例中,或者在扩展Application 的类中。反过来可以使用getApplication()从活动类中访问。

如果使用得当,静态单例的运行方式与应用程序类相同,除了单例可以从任何地方访问,而应用程序类只能通过上下文来访问。

Here 一个相关的问题,关于 Application 和 singleton 之间的区别是什么。

【讨论】:

    【解决方案2】:

    不,你不需要这样做。

    通常,如果您有一个长时间运行的类需要在整个 Activity 生命周期中继续存在,那么将它放在绑定服务中就可以了。它需要您通过 IPC 传输数据。在这种情况下,应该没关系。由于您实际上处理的是String 数组,因此您可以将其放入您即将开始的ActivityIntent 对象中,或者放入Intent 对象的Bundle 中。

    在创建 Activity 时,只需使用 Intent#getExtras() 方法打开 Bundle 并重建您的列表。与使用Service 的 IPC 相比,它不会花费太多时间,并且应该更容易维护。

    编辑:

    您可以尝试的一件事是覆盖Application 对象。您必须在Manifest 中指定新的入口点,但如果您从Application 类构建Singleton 并将引用保存在那里,只要您的应用程序正在运行,它就应该保持活动状态。离开时它会被销毁。

    【讨论】:

    • 使用静态单例类来保存字符串数组可以吗?还是服务或新活动创建一个新活动? (静态对象的范围不同?)
    • 这不太可能发生,但如果 Android 彻底决定销毁您的服务以释放内存,那么您就不走运了。最好删除依赖项而不是创建它们。
    • 当一个单例被正确引用时,它不应该被垃圾回收。因此,例如 private static final Object instance = new Object();应该可以正常工作。
    猜你喜欢
    • 2010-10-31
    • 1970-01-01
    • 1970-01-01
    • 2016-05-12
    • 2011-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-19
    相关资源
    最近更新 更多