Android开发慎用Static变量
static变量在类加载时被初始化,存储在JVM的方法区中,整个内存中只有一个static变量的拷贝,可以使用类名直接访问,也可以通过类的实例化对象访问,一般不推荐通过实例化对象访问,通俗的讲static变量属于类,不属于对象,任何实例化的对象访问的都是同一个static变量,任何地放都可以通过类名来访问static变量。
基于以上的特性,在Android中通过static变量或者static函数来作为数据传输或作为更新UI的接口,使用起来很便捷,但是存在很大隐患。首先static变量会在类卸载的时候销毁,类卸载最常见的场景是进程销毁,在Android中进程销毁场景更常见。特别是在Activity、Service等组件中定义的static更容易被回收,出现空指针异常。一般将使用的static变量定义在Application中,由于Application生命周期最长,所以static变量相对更安全,但也有不可靠的情况,所以在Android中要谨慎使用静态变量,特别是在Activity和Service等组件中。 一般是能用静态变量的尽量用单例代替,使用static的场景一般是定义常量( final static int a=1),和定义单例(private static SigleTon instance)的时候。
网友评论