Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android開發之警惕static變量使用

Android開發之警惕static變量使用

編輯:關於Android編程

 

大家都知道static變量有很多好處就是可以在保存全局數據。但是由此可能帶來很隱蔽的BUG。

情況:


本人在開發一個項目的時侯有切身的體會,以下這個BUG查找了很久才知道。由於多個人開發的項目。某個同事使用了static預先緩存一些列表數據,方便下個界面使用。該數據保存了一些圖片的引用,而這些圖片又單獨在另外一個列表保存,但是在退出程序的時侯又把這些圖片Recycle(回收)了。

 


現象:

偶爾進入程序出現使用了已回收的圖片的問題。

java.lang.RuntimeException: Canvas: trying to use a recycled bitmap android.graphics.Bitmap

 


分析:

由於Android架構設計原因,在程序退出時,static數據並沒有立即得到清理。在上面的案例中可以發現,當預先加載網絡數據比較慢,再進入下一個界面時,發現static變量有數據。這個時侯就使用這個數據就是程序退出時的數據,但該數據引用的圖片已回收。就導致前面的現象發生。

 


解決:

在退出程序時,同時清空static變量裡面的數據。

 


建議:

在開發的過程中,盡量少使用static數據,盡量把static變量集中在一個類。(僅供參考)

 


延伸:

Android退出程序時,沒有把static數據立即清理的驗證。


public class TestStatic {
    private static int nValue = 0;
    static {
        nValue += 100;
    }
   
    public TestStatic() {
        nValue += 300;
        Log.i("TestStatic", "nValue:"+nValue);
    }

}

 


結果:

05-09 11:15:04.589: I/TestStatic(8093): nValue:400
05-09 11:15:08.309: I/TestStatic(8093): nValue:700

 


第一次進入程序時,先執行static代碼,再到TestStatic();

第二次進入程序時,直接執行TestStatic(),跳過了static代碼;

 

 

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved