編輯:初級開發
ERROR/androidRuntime(16350): Java.lang.OutOfMemoryError: bitmap size exceeds VM budget
我們知道,android程序內存一般限制在16M,當然也有24M的,而android程序內存被分為2部分:native和dalvik,dalvik就是我們平常說的Java堆,我們創建的對象是在這裡面分配的,而bitmap是直接在native上分配的,對於內存的限制是 native+dalvik 不能超過最大限制。
用以下命令可以查看程序的內存使用情況:
adb shell dumpsys meminfo $package_name or $pid //使用程序的包名或者進程id
用android自帶的gallery程序為例:
具體每一項代表什麼,參考:http://stackoverflow.com/questions/2298208/how-to-discover-memory-usage-of-my-application-in-android#2299813,我們比較關心的是這2行:
其中size是需要的內存,而allocated是分配了的內存,對應的2列分別是native和dalvik,當總數也就是total這一列超過單個程序內存的最大限制時,OOM就很有可能會出現了。
多數時候,發生OOM 都是在做一些跟圖片相關的操作,以下提出一些建議盡量可以減少這種情況的發生:
1.decode bitmap 的時候,盡量配置下Options,例如:inSameSize
2.Bitmap使用完以後,調用 bitmap.recycle()來釋放內存
3.如果應用是基於圖片的應用,盡量采用LazyLoad和DymanicRecycle
4.decode bitmap 的時候,將decode代碼 try catch 出來,catch oom error,避免程序crash,可以在catch裡面做一些釋放內存操作
前言關鍵字: DigitalClock date formatandroid的DigitalClock並沒有設置輸出格式的屬性或方法,但是可以通過繼承重寫來實現,見正文
最近因為因緣際會,看了好些與創新理論相關的書籍。其中創新理論權威、哈佛大學商學院教授克裡斯汀生所著《創新者的解答》一書,我個人認為頗有意思,尤其對於開放系統與封閉系
1.2.4 範例程式(3):採單純委託方法1.2.4.1 撰寫步驟:Step-1: 建立android專案:Px03。Step-2: 撰寫Activity的子類別:ac