前言:高效的Bitmap显示

2024-06-18 02:08
文章标签 高效 显示 前言 bitmap

本文主要是介绍前言:高效的Bitmap显示,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

声明:Ryan的博客文章欢迎您的转载,但在转载的同时,请注明文章的来源出处,不胜感激! :-) 

http://my.oschina.net/ryanhoo/blog/88153

译者:Ryan Hoo

来源:https://developer.android.com/develop/index.html

译者按: 在Google最新的文档中,提供了一系列含金量相当高的教程。因为种种原因而鲜为人知,真是可惜!Ryan将会细心整理,将之翻译成中文,希望对开发者有所帮助。

        本系列是Google关于展示大Bitmap(位图)的官方演示,可以有效的解决内存限制,更加有效的加载并显示图片,同时避免让人头疼的OOM(Out Of Memory)。

-------------------------------------------------------------------------------------

译文:

        这一系列教程覆盖了一些用于处理和加载Bitmap(位图)对象的常用技术,在某种程度上,使用这些技术可以使你的用户接口(UI)组件保持良好的响应性能,并且避免超出程序内存限制。如果你不小心翼翼,这些位图对象可以迅速消耗你的可用内存,并引起严重的错误而导致程序崩溃:

            java.lang.OutofMemoryError: bitmap size exceeds VM budget.

          这里有一堆的原因向你解释为什么在Android应用中加载Bitmap会如此棘手:

             · 移动设备一般只有有限的系统资源。Android设备为单个应用分配的可用内存仅为16M。在Android兼容性说明文档(Android Compatibility Definition Document(CDD))的3.7章————虚拟设备的兼容性中,给出了不同屏幕尺寸和密度的手机所需要的最小内存。在有着最小内存限制条件下,应用应该对性能进行优化处理。但是请记住,很多设备的配置要高于这个限制。

             · Bitmap(位图)尤其是一些像照片这种丰富的图片,需要占用大量的内存。例如,Galaxy Nexus摄像头拍摄的照片为2592*1936px(5百万像素)。如果使用ARGB_8888(Android2.3之前的默认配置)加载该位图,需要占用19M的内存(2592*1936*4),立马将一些设备的单个应用内存消耗一空。  

            · Android应用的UI经常需要一次加载很多图片。像ListViewGridViewViewPager这种组件通常包含许多在屏幕上显示的位图,并且还有很多潜藏在屏幕之外的图片,准备在屏幕滑动的时候显示出来。  

    要解决这些问题,你需要学习如下课程:

-------------------------------------------------------------------------------------

第一课:高效地加载大Bitmap

        这节课将带你贯穿各种以不超过应用的内存限制的方式解码大Bitmap。

第二课:在非UI线程中处理Bitmap

        Bitmap处理(改变图片尺寸,远程下载等等)不应该在UI线程中进行。这节课将带你学习使用AsyncTask在后台线程进行图片处理并且阐述如何处理并发问题。

第三课:缓存Bitmap

    这节课将教会你使用内存和硬盘两种方式缓存Bitmap来提升在加载多个Bitmap时UI的响应性和流畅性。

第四课:在你的UI中显示Bitmap

这节课将所有东西综合起来,向你展示如何使用后台线程和Bitmap缓存,加载多个Bitmap到ViewPager和GridView这样的组件中去。

这篇关于前言:高效的Bitmap显示的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/1071011

相关文章

Python使用FFmpeg实现高效音频格式转换工具

《Python使用FFmpeg实现高效音频格式转换工具》在数字音频处理领域,音频格式转换是一项基础但至关重要的功能,本文主要为大家介绍了Python如何使用FFmpeg实现强大功能的图形化音频转换工具... 目录概述功能详解软件效果展示主界面布局转换过程截图完成提示开发步骤详解1. 环境准备2. 项目功能结

idea中project的显示问题及解决

《idea中project的显示问题及解决》:本文主要介绍idea中project的显示问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录idea中project的显示问题清除配置重China编程新生成配置总结idea中project的显示问题新建空的pr

Python Pandas高效处理Excel数据完整指南

《PythonPandas高效处理Excel数据完整指南》在数据驱动的时代,Excel仍是大量企业存储核心数据的工具,Python的Pandas库凭借其向量化计算、内存优化和丰富的数据处理接口,成为... 目录一、环境搭建与数据读取1.1 基础环境配置1.2 数据高效载入技巧二、数据清洗核心战术2.1 缺失

使用Python和SQLAlchemy实现高效的邮件发送系统

《使用Python和SQLAlchemy实现高效的邮件发送系统》在现代Web应用中,邮件通知是不可或缺的功能之一,无论是订单确认、文件处理结果通知,还是系统告警,邮件都是最常用的通信方式之一,本文将详... 目录引言1. 需求分析2. 数据库设计2.1 User 表(存储用户信息)2.2 CustomerO

电脑显示mfc100u.dll丢失怎么办?系统报错mfc90u.dll丢失5种修复方案

《电脑显示mfc100u.dll丢失怎么办?系统报错mfc90u.dll丢失5种修复方案》最近有不少兄弟反映,电脑突然弹出“mfc100u.dll已加载,但找不到入口点”的错误提示,导致一些程序无法正... 在计算机使用过程中,我们经常会遇到一些错误提示,其中最常见的就是“找不到指定的模块”或“缺少某个DL

Java中的StringBuilder之如何高效构建字符串

《Java中的StringBuilder之如何高效构建字符串》本文将深入浅出地介绍StringBuilder的使用方法、性能优势以及相关字符串处理技术,结合代码示例帮助读者更好地理解和应用,希望对大家... 目录关键点什么是 StringBuilder?为什么需要 StringBuilder?如何使用 St

MySQL重复数据处理的七种高效方法

《MySQL重复数据处理的七种高效方法》你是不是也曾遇到过这样的烦恼:明明系统测试时一切正常,上线后却频频出现重复数据,大批量导数据时,总有那么几条不听话的记录导致整个事务莫名回滚,今天,我就跟大家分... 目录1. 重复数据插入问题分析1.1 问题本质1.2 常见场景图2. 基础解决方案:使用异常捕获3.

如何高效移除C++关联容器中的元素

《如何高效移除C++关联容器中的元素》关联容器和顺序容器有着很大不同,关联容器中的元素是按照关键字来保存和访问的,而顺序容器中的元素是按它们在容器中的位置来顺序保存和访问的,本文介绍了如何高效移除C+... 目录一、简介二、移除给定位置的元素三、移除与特定键值等价的元素四、移除满足特android定条件的元

基于Python实现高效PPT转图片工具

《基于Python实现高效PPT转图片工具》在日常工作中,PPT是我们常用的演示工具,但有时候我们需要将PPT的内容提取为图片格式以便于展示或保存,所以本文将用Python实现PPT转PNG工具,希望... 目录1. 概述2. 功能使用2.1 安装依赖2.2 使用步骤2.3 代码实现2.4 GUI界面3.效

Java图片压缩三种高效压缩方案详细解析

《Java图片压缩三种高效压缩方案详细解析》图片压缩通常涉及减少图片的尺寸缩放、调整图片的质量(针对JPEG、PNG等)、使用特定的算法来减少图片的数据量等,:本文主要介绍Java图片压缩三种高效... 目录一、基于OpenCV的智能尺寸压缩技术亮点:适用场景:二、JPEG质量参数压缩关键技术:压缩效果对比