返回介绍

高效顯示Bitmap

发布于 2020-04-01 13:16:43 字数 2889 浏览 1010 评论 0 收藏 0

編寫:kesenhoo - 原文:http://developer.android.com/training/displaying-bitmaps/index.html

這一章節會介紹一些處理與加載Bitmap對象的常用方法,這些技術能夠使得程序的UI不會被阻塞,並且可以避免程序超出內存限制。如果我們不注意這些,Bitmaps會迅速的消耗掉可用內存從而導致程序崩潰,出現下面的異常:java.lang.OutofMemoryError: bitmap size exceeds VM budget.

在Android應用中加載Bitmaps的操作是需要特別小心處理的,有下面幾個方面的原因:

  • 移動設備的系統資源有限。Android設備對於單個程序至少需要16MB的內存。Android Compatibility Definition Document (CDD), Section 3.7. Virtual Machine Compatibility 中給出了對於不同大小與密度的屏幕的最低內存需求。 應用應該在這個最低內存限制下去優化程序的效率。當然,大多數設備的都有更高的限制需求。
  • Bitmap會消耗很多內存,特別是對於類似照片等內容更加豐富的圖片。 例如,Galaxy Nexus的照相機能夠拍攝2592x1936 pixels (5 MB)的圖片。 如果bitmap的圖像配置是使用ARGB_8888 (從Android 2.3開始的默認配置) ,那麼加載這張照片到內存大約需要19MB(2592*1936*4 bytes) 的空間,從而迅速消耗掉該應用的剩餘內存空間。
  • Android應用的UI通常會在一次操作中立即加載許多張bitmaps。 例如在ListView, GridViewViewPager 等控件中通常會需要一次加載許多張bitmaps,而且需要預先加載一些沒有在屏幕上顯示的內容,為用戶滑動的顯示做準備。

參考資料

章節課程

  • 高效的加載大圖(Loading Large Bitmaps Efficiently)

    這節課會帶領你學習如何解析很大的Bitmaps並且避免超出程序的內存限制。

  • 非UI線程處理Bitmap(Processing Bitmaps Off the UI Thread)

    處理Bitmap(裁剪,下載等操作)不能執行在主線程。這節課會帶領你學習如何使用AsyncTask在後臺線程對Bitmap進行處理,並解釋如何處理併發帶來的問題。

  • 緩存Bitmaps(Caching Bitmaps)

    這節課會帶領你學習如何使用內存與磁盤緩存來提升加載多張Bitmaps時的響應速度與流暢度。

  • 管理Bitmap的內存使用(Managing Bitmap Memory)

    這節課會介紹如何管理Bitmap的內存佔用,以此來提升程序的性能。

  • 在UI上顯示Bitmap(Displaying Bitmaps in Your UI)

    這節課會綜合之前章節的內容,演示如何在諸如ViewPagerGridView等控件中使用後臺線程與緩存加載多張Bitmaps。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文