【问题标题】:android - Headless Retained Fragment vs. Class with public static variables (Global Class)android - 无头保留片段与具有公共静态变量的类(全局类)
【发布时间】:2014-10-03 11:11:40
【问题描述】:

我是一个使用包含公共静态变量的全局类的 Android 项目的一部分,如下例所示:

public class Globals {
    public static MyObject variable = "this is a test";
}

在使用应用程序的过程中,这个全局变量的值会发生变化,比如说:

@Override
public void onCreate(Bundle savedInstanceState) {
    Globals.variable = new MyObject(somethingHere);
}

我从这些博客文章中发现了使用 Headless Retained Fragments: http://www.androiddesignpatterns.com/2013/04/retaining-objects-across-config-changes.html http://www.vogella.com/tutorials/AndroidFragments/article.html#headlessfragments

问题:
我需要在整个应用程序中都有一个初始化对象的引用。

问题:
哪个更好实施,好的做法,实用?还是有其他方法可以在整个应用程序中存储对象的引用?

全局类已在项目中使用,并且工作正常,但是这种实现有什么缺点吗?

【问题讨论】:

    标签: android performance android-fragments


    【解决方案1】:

    这个实现有什么缺点吗?

    内存泄漏,具体取决于您在那里存储的内容。泄漏是为什么静态数据成员在经典 Java 中被认为是糟糕的形式,即使我们倾向于在 Android 应用开发中更多地使用它们。

    此外,这些数据需要被视为缓存,必须能够在首次访问时延迟创建。您的进程可以在任何时候终止(清除静态数据成员)并且用户可以返回到您的应用程序中的任何活动(由最近的任务列表提供)。如果您希望这些数据在进程终止后仍然存在,最可能的解决方案是将其保存在文件、数据库或SharedPreferences 中。

    话虽如此,保留片段是针对每个活动的解决方案,而不是针对每个应用程序的解决方案,因此它不是您的场景 AFAICT 的有效替代方案。

    【讨论】:

    • 正如我所看到的 globals 类,它包含原始数据类型和对象。下次我打开应用程序时变量的值不需要存在,但是这个变量的值会随着用户与应用程序的交互而改变,比如从一个活动转移到另一个活动,另一个活动将是使用变量的值或再次更改它,这取决于是否需要更改。
    • @NyahahaWakoko:“这个变量的值会随着用户与应用程序的交互而改变,比如从一个活动转移到另一个活动,另一个活动将使用该变量的值,或者再次更改它,具体取决于是否需要更改”-恕我直言,听起来您应该使用事件总线而不是全局变量,但这只是我。
    • 是的,我很想使用事件总线,但是项目经理不允许我添加任何其他库,所以我真的必须编写它。现在对我来说最糟糕的情况是跟随他们已经开始的事情,即使它对内存泄漏是开放的。针对此类问题的任何最佳实践或方法都会有很大帮助..
    • @NyahahaWakoko:“我很想使用事件总线,但项目经理不允许我添加任何其他库”——LocalBroadcastManager 是 Android 支持包的一部分。 “针对此类问题的任何最佳实践或方法都会有很大帮助”——您还没有说明存在问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-12
    • 1970-01-01
    • 2013-02-01
    相关资源
    最近更新 更多