前言:高效的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

相关文章

C#使用Spire.Doc for .NET实现HTML转Word的高效方案

《C#使用Spire.Docfor.NET实现HTML转Word的高效方案》在Web开发中,HTML内容的生成与处理是高频需求,然而,当用户需要将HTML页面或动态生成的HTML字符串转换为Wor... 目录引言一、html转Word的典型场景与挑战二、用 Spire.Doc 实现 HTML 转 Word1

Redis实现高效内存管理的示例代码

《Redis实现高效内存管理的示例代码》Redis内存管理是其核心功能之一,为了高效地利用内存,Redis采用了多种技术和策略,如优化的数据结构、内存分配策略、内存回收、数据压缩等,下面就来详细的介绍... 目录1. 内存分配策略jemalloc 的使用2. 数据压缩和编码ziplist示例代码3. 优化的

使用SpringBoot+InfluxDB实现高效数据存储与查询

《使用SpringBoot+InfluxDB实现高效数据存储与查询》InfluxDB是一个开源的时间序列数据库,特别适合处理带有时间戳的监控数据、指标数据等,下面详细介绍如何在SpringBoot项目... 目录1、项目介绍2、 InfluxDB 介绍3、Spring Boot 配置 InfluxDB4、I

C#高效实现Word文档内容查找与替换的6种方法

《C#高效实现Word文档内容查找与替换的6种方法》在日常文档处理工作中,尤其是面对大型Word文档时,手动查找、替换文本往往既耗时又容易出错,本文整理了C#查找与替换Word内容的6种方法,大家可以... 目录环境准备方法一:查找文本并替换为新文本方法二:使用正则表达式查找并替换文本方法三:将文本替换为图

Python如何实现高效的文件/目录比较

《Python如何实现高效的文件/目录比较》在系统维护、数据同步或版本控制场景中,我们经常需要比较两个目录的差异,本文将分享一下如何用Python实现高效的文件/目录比较,并灵活处理排除规则,希望对大... 目录案例一:基础目录比较与排除实现案例二:高性能大文件比较案例三:跨平台路径处理案例四:可视化差异报

Java整合Protocol Buffers实现高效数据序列化实践

《Java整合ProtocolBuffers实现高效数据序列化实践》ProtocolBuffers是Google开发的一种语言中立、平台中立、可扩展的结构化数据序列化机制,类似于XML但更小、更快... 目录一、Protocol Buffers简介1.1 什么是Protocol Buffers1.2 Pro

Java高效实现Word转PDF的完整指南

《Java高效实现Word转PDF的完整指南》这篇文章主要为大家详细介绍了如何用Spire.DocforJava库实现Word到PDF文档的快速转换,并解析其转换选项的灵活配置技巧,希望对大家有所帮助... 目录方法一:三步实现核心功能方法二:高级选项配置性能优化建议方法补充ASPose 实现方案Libre

在IntelliJ IDEA中高效运行与调试Spring Boot项目的实战步骤

《在IntelliJIDEA中高效运行与调试SpringBoot项目的实战步骤》本章详解SpringBoot项目导入IntelliJIDEA的流程,教授运行与调试技巧,包括断点设置与变量查看,奠定... 目录引言:为良驹配上好鞍一、为何选择IntelliJ IDEA?二、实战:导入并运行你的第一个项目步骤1

使用Python构建一个高效的日志处理系统

《使用Python构建一个高效的日志处理系统》这篇文章主要为大家详细讲解了如何使用Python开发一个专业的日志分析工具,能够自动化处理、分析和可视化各类日志文件,大幅提升运维效率,需要的可以了解下... 目录环境准备工具功能概述完整代码实现代码深度解析1. 类设计与初始化2. 日志解析核心逻辑3. 文件处

Java docx4j高效处理Word文档的实战指南

《Javadocx4j高效处理Word文档的实战指南》对于需要在Java应用程序中生成、修改或处理Word文档的开发者来说,docx4j是一个强大而专业的选择,下面我们就来看看docx4j的具体使用... 目录引言一、环境准备与基础配置1.1 Maven依赖配置1.2 初始化测试类二、增强版文档操作示例2.