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)的時候。