【问题标题】:android singleton vs static methodsandroid单例与静态方法
【发布时间】:2011-07-13 06:40:18
【问题描述】:

我需要加载一些文件并将它们存储在一个静态变量中。

几乎每个 Activity 都需要 load 和 getter 方法。

我打算将方法设为静态,但一些博主不喜欢它。

对我来说,这两种方法的主要优点和缺点如下。

单身

优点:能够保持多态性。

缺点:必须在每个 Activity 中调用 getInstantace 方法。

静态方法反之亦然。

请指导我在这两种方法或任何其他方法之间进行选择。

任何帮助将不胜感激。

【问题讨论】:

    标签: java android design-patterns


    【解决方案1】:

    我会避免在 Android 中使用静态变量,因为如果您的应用暂停并且手机资源不足,Android 通常会清除您的类中的所有静态数据,从而导致意外的空指针异常。在 Google 上搜索“Android Static Null”以获得更好的解释。

    无论是哪种方式(静态方法或单例),您都应确保您的应用能够保存状态并恢复状态,以防 Android 清除您的静态变量。

    【讨论】:

    • 那个答案,android static null,让我很开心。您只是想找到的那些隐藏的大脑升级之一。
    【解决方案2】:

    你可以找到几乎不喜欢任何东西的“一些博主”。静态方法没有任何问题,只要它们操作的任何状态都是方法的本地状态/每次调用都传入(同样的警告适用于单例上的实例方法)。

    任何一种方法都应该没问题,只需选择您喜欢的方法即可。作为一般经验法则,如果您的单例实例不会保持任何在运行时可能可变的状态,请使用静态方法。否则,如果单例是为了保存状态而不仅仅是作为少数实用方法的存储库,那么将其设为单例。

    我遇到的反对使用静态方法的唯一合理的论点是静态方法对于单元测试目的的模拟是有问题的。但我的猜测是您可能没有进行模拟单元测试,而且我认为使用模拟对象进行测试的价值通常被夸大了,当您查看它相对于设置工作量的值时测试用例。

    【讨论】:

      【解决方案3】:

      正确的方法是使用依赖注入。有一个问题here 讨论了您的替代方案。

      对我来说,单例方法和静态方法实际上是一回事。您的类与单例和单例实现之间仍然存在紧密耦合,无论如何,单例实现都使用静态成员。我会说选择最适合您风格的。

      【讨论】:

        【解决方案4】:

        我更喜欢使用单例。 静态的一个缺点是它总是在应用启动时存在,即使你没有使用这个对象,它也会从系统中消耗一些内存。

        【讨论】:

        • 您确定它在应用启动时存在,而不仅仅是在第一次使用该类时存在?
        • 这没有意义。他正在将文件加载到静态变量中。只要文件未加载,它就不会占用内存...
        • @Thomas:我不确定,AFAIK 静态变量将在类加载时初始化。但我不确定是否加载了计时类,它取决于操作 dalvilk VM?
        • 类在第一次访问时加载,而不是在应用启动时加载
        猜你喜欢
        • 1970-01-01
        • 2012-11-12
        • 2011-05-17
        • 2019-06-19
        • 2010-10-10
        • 1970-01-01
        • 2015-06-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多