1. 程式人生 > >Android中全域性變數被系統回收的問題

Android中全域性變數被系統回收的問題

1. 普通Java類中的全域性變數經常被系統回收,我們都知道也都瞭解,Google官方推薦使用Application來代替static來儲存變數,但事實上application儲存的全域性變數也經常會被系統回收,尤其是一些記憶體特別低的手機或者後臺執行應用程式特別多的情況下。

2. 在專案中不知道你們遇到沒有遇到:比如當我們在程式中啟動相機,或者程式執行時有電話突然打進來,一些相機經常由於記憶體不足而把app整個殺掉了,記憶體大點的手機相對來說會好一些,但也不能完全排除被回收的情況;再比如我們app利用第三方應用程式進行分享操作時,分享出去後,再返回剛才app的介面,當前介面持有的全域性變數就會被系統回收,記憶體特別低的手機表現尤為明顯。

那麼對於這類情況該怎麼辦呢?

如果是activity級別的變數,倒是可以利用onSaveInstanceState(Bundle outState)這個方法來儲存,可是Application沒有類似的方法。我們只能利用本地檔案儲存了,比如常用的shareprefence、sqlite、file三種儲存方式。至少這是最可靠的方法了,當然由於要讀寫檔案,速度上會受到影響,可以說是無奈之舉。強烈建議google也給Application加上一個類似onSaveInstanceState(Bundle outState)的方法。

專案中遇到了第三方Mail、Gmail分享檔案完畢後再返回app全域性變數為空的問題,在一些記憶體較低的手機上覆現概率較大,配置高的手機上則表現不出來,採用了在Activity OnCreate()方法中將全域性變數在不為空得情況下賦值本地sharepreference,在用到的地方取值,本質上是對於檔案的讀寫,這樣理論上速度降低了,效能下降了,但是隻是涉及到一個值,UI上沒有任何感覺,也是無奈之選。

如果大家有其他好的方法,歡迎留言,指點。