當前位置:編程學習大全網 - 源碼下載 - Android系統中Bitmap是否有調用recycle方法的必要性

Android系統中Bitmap是否有調用recycle方法的必要性

顯然的是需要的啦。

Bitmap類有壹個方法recycle(),從方法名可以看出意思是回收。這裏就有疑問了,Android系統有自己的垃圾回收機制,可以不定期的回收掉不使用的內存空間,當然也包括Bitmap的空間。那為什麽還需要這個方法呢?

Bitmap類的構造方法都是私有的,所以開發者不能直接new出壹個Bitmap對象,只能通過BitmapFactory類的各種靜態方法來實

例化壹個Bitmap。仔細查看BitmapFactory的源代碼可以看到,生成Bitmap對象最終都是通過JNI調用方式實現的。所以,加載

Bitmap到內存裏以後,是包含兩部分內存區域的。簡單的說,壹部分是Java部分的,壹部分是C部分的。這個Bitmap對象是由Java部分分配

的,不用的時候系統就會自動回收了,但是那個對應的C可用的內存區域,虛擬機是不能直接回收的,這個只能調用底層的功能釋放。所以需要調用

recycle()方法來釋放C部分的內存。從Bitmap類的源代碼也可以看到,recycle()方法裏也的確是調用了JNI方法了的。

那如果不調用recycle(),是否就壹定存在內存泄露呢?也不是的。Android的每個應用都運行在獨立的進程裏,有著獨立的內存,如果整個進程被應用本身或者系統殺死了,內存也就都被釋放掉了,當然也包括C部分的內存。

Android對於進程的管理是非常復雜的。簡單的說,Android系統的進程分為幾個級別,系統會在內存不足的情況下殺死壹些低優先級的進程,

以提供給其它進程充足的內存空間。在實際項目開發過程中,有的開發者會在退出程序的時候使用

Process.killProcess(Process.myPid())的方式將自己的進程殺死,但是有的應用僅僅會使用調用

Activity.finish()方法的方式關閉掉所有的Activity。

Android手機的用戶,根據習慣不同,可能會有兩種方式退出整個應用程序:壹種是按Home鍵直接退到桌面;另壹種是從應用程序的退出按鈕或者

按Back鍵退出程序。那麽從系統的角度來說,這兩種方式有什麽區別呢?按Home鍵,應用程序並沒有被關閉,而是成為了後臺應用程序。按Back鍵,壹

般來說,應用程序關閉了,但是進程並沒有被殺死,而是成為了空進程(程序本身對退出做了特殊處理的不考慮在內)。

Android系統已經做了大量進程管理的工作,這些已經可以滿足用戶的需求。個人建議,應用程序在退出應用的時候不需要手動殺死自己所在的進程。對於應用程序本身的進程管理,交給Android系統來處理就可以了。應用程序需要做的,是盡量做好程序本身的內存管理工作。

壹般來說,如果能夠獲得Bitmap對象的引用,就需要及時的調用Bitmap的recycle()方法來釋放Bitmap占用的內存空間,而不要等Android系統來進行釋放。

  • 上一篇:學習Java語言有什麽優勢?
  • 下一篇:航海王燃燒意誌制藥怎麽玩 航海王燃燒意誌制藥攻略
  • copyright 2024編程學習大全網