在Application类和静态类中存储全局对象

时间:2017-03-01 07:10:10

标签: java android classloader static-variables

这两种方法在这些变量的生命周期方面是否存在任何差异?

据我所知,在这两种情况下,当应用程序从内存中清除时,foo会收集垃圾

端。 (对吗?还是我错过了什么?)

选项1:在Application类中存储静态变量:

public class App extends android.app.Application {
    private static SomeClass foo;

    public static init setSomeObject(SomeClass someValue){
       foo = someValue;
    }


    public static SomeClass getSomeObject(){
       return foo;
    }
}

选项2:在任何静态类中串一个静态变量?

public class JustSomeClass {
    private static SomeClass foo;

        public static init setSomeObject(SomeClass someValue){
           foo = someValue;
        }

        public static SomeClass getSomeObject(){
           return foo;
        }
}

我更喜欢第二种,纯粹是为了更好的可读性,因为我不希望我的Application类增长得太大,但我需要知道它是否有任何缺点。

2 个答案:

答案 0 :(得分:2)

我同意GhostCatChetan。 我也觉得必须避免使用静态以避免过多的内存使用。

我更喜欢为每个进程创建一个单例类,例如,处理我的应用程序中的屏幕流,或编写数据库操作的辅助方法或我应用程序中许多活动/片段使用的常用方法。

This链接对Application class vs. Singleton进行了很好的讨论。

答案 1 :(得分:1)

从概念上讲, static 是良好OO设计中的异常。因此,当您询问最佳实践时,首先要考虑首先使用 static 的设计。

除此之外:你的课程应该类似于"事物的有用的模型。你打算建造。你不会在这里放东西&#34 ;;你把它放在......它从概念上来说属于它。