Android Application中全局變量導致NullPointException

問題

接手一個項目,根據統計的奔潰日誌,發現遇到點問題,當我們將應用按home鍵放入後臺運行,一段時間後,當我們再次打開應用的時候,十有八九會出現一個NullPointException的空指針異常,定位問題,發現將很多數據放入了application中作爲全局變量,導致了問題的產生。
因爲當應用程序在後臺運行的時候,當我們將應用程序切入到後臺或者當內存不足時,系統可能會將當前應用的application進程幹掉,
當我們再次從後臺將應用切換到前臺的時候,系統會重新生成一個application類,這個時候,我們在顯示的activity中調用

app = (MyApplication) getApplication();
String name = app.getName();tv.setText(name.toLowerCase());

上面的name就是空的,因此會出現空指針異常,也就是說,我們存儲在application中的數據,有可能會因爲程序運行在後臺的時候導致application的銷燬和重建進而導致數據的丟失,這對於程序來說是致命的,直接導致空指針異常的出現,程序崩潰。

解決辦法

1、通過intent來傳遞數據,而不是將數據放在全局變量application中,當然這麼做是有侷限性的,並不是所有地方都適合用intent來傳遞數據,也並不是所有類型的數據都適合用intent來傳遞。

2、將數據進行持久化操作,寫入文件,shareprefrence,數據庫等等各種能夠安全保存數據的方法。然後在需要使用數據的地方進行文件讀取操作。

3、在所有需要使用此類數據的地方進行非空的判斷,然後進行相應的操作。

總結

不要輕易在application類中進行數據的存儲操作,application類中應當做的是進行一些全局性的配置的初始化操作,而數據的存儲應該使用前面推薦的幾種方法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章