我有一个扩展我的User对象的静态单例类:

public class TestSingleton extends User{

    private static TestSingleton singletonInstance;

    private TestSingleton() {
    }

    public static TestSingleton getObj() {
        if (singletonInstance == null) {
            singletonInstance = new TestSingleton();
        }
        return singletonInstance;
    }
}

单例的目的是避免每次我想在不同 Activity 中使用User对象时都创建新实例:
TestSingleton test = new TestSingleton();
test.doSomthing();

并在我的应用程序生命周期中一次只编写一行代码并仅创建一次实例:
TestSingleton.getObj().doSomthing();

我的问题是:

静态Singleton的这种使用是否会造成内存泄漏并保留对我使用Singleton的任何 Activity 的引用?

使用安全吗?还是有更好的解决方案?

最佳答案



在99.9%的情况下,

Is it safe to use?

那取决于您所指的安全。例如,您的实现不是线程安全的。如果您从两个不同的线程调用getObj(),则可能会实例化两次TestSingleton。
 or there is a better solution?

有一个使用Enum的Singleton模式的实现。您可以找到有关有效Java的示例

09-28 14:28