`
damengjiejie
  • 浏览: 9943 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

Android 图片开发内幕第一篇

 
阅读更多

前言:本来我是做电视应用的,但是因为公司要出手机,人员紧张,所以就抽调我去支援一下,谁叫俺是雷锋呢!我做的一个功能就是处理手机中的应用ICON,处理无非就是美化一下,重新与底板进行合成和裁剪,用到了很多Bitmap的知识。本来之前一直想写一些关于Bitmap的博客,正好这是个机会,因此Bitmap那些事系列博客诞生了。这个系列我会把学习Bitmap的一些知识发布出来供大家参考和交流。

 

        在手机中图片一般都是指Bitmap图片,为什么要说Bitmap呢?因为大家在开发应用的时候,都会使用一些图片来表现UI,用户也喜欢看图片,看文字获取信息太慢并且不直观,如果美工设计的好,看图片基本上不怎么看你的文字内容就知道你要表达什么,例如所有的购物网站都会编辑很多商品的配图来呈现给用户,由此可见图片在应用程序中的常见和重要。只要说到图片就不能离开如何避免OOM这个主题,因为在处理很多图片时很容易出现OOM,那么学习图片处理就显得尤为重要了,下面就让我们一步一步学习图片的相关知识。

 

Bitmap图片占用内存计算:

        Bitmap图片在加载到内存的时候是按照:宽*高*像素点位数来计算的。你可以把图片看成是由width行、height列的矩阵组成,每一个矩阵元素代表一个像素点,每一个像素点都是1byte整数倍的数据,这个数据越大,表示的色彩就越丰富,图片的显示质量就越高。Bitmap中有一个枚举类Config用来配置图片的压缩格式,代表每个像素是用多大的数据来存储的,数值越大能够存储的颜色信息就越多,也就越丰富,显示效果也就越好。Config.ALPHA_8是1 byte,Config.RGB_565和Config.ARGB_4444都是2 bytes,Config.RGB_565没有Alpha值所以多用来配置没有透明度的图片,Config.ARGB_8888是4 bytes,一般图片都是按照这个来配置的。下面是获取配置的代码:

 

1
2
3
4
5
6
7
8
9
10
11
12
static int getBytesPerPixel(Config config) {
    if (config == Config.ARGB_8888) {
        return 4;
    else if (config == Config.RGB_565) {
        return 2;
    else if (config == Config.ARGB_4444) {
        return 2;
    else if (config == Config.ALPHA_8) {
        return 1;
    }
    return 1;
}

使用图片你需要注意哪些:

1、android系统自身的问题。android系统给每一个应用分配了一定的内存空间,分配了多少要看厂家和机型,数值可以通过Runtime类获取,Runtime.getRuntime()获取实例,然后通过maxMemory()方法获取系统可为APP分配的最大内存,totalMemory() 获取APP当前所分配的内存heap空间大小,freeMemory()获取当前可用的内存,当被耗尽时会自动扩张,但是不会超过maxMemory。下图为google官网提供的不同分辨率下不同的dpi分配的最小内存;

 

 

2、需要多大的照片。很多图片其实在手机上显示的时候不需要完全把原图加载到内存中,比如我手机相机拍了一张照片是4208*3120的,加载到内存中占用的内存就是52M,这是很恐怖的,两张照片差不多就把你的app内存给耗光了。一般情况下你都需要对需要加载的图片进行处理,这个处理主要是减小图片尺寸,降低分辨率,比如你的控件显示就是100*100的大小,那你就要把图片缩小到100*100。

 

3、及时释放内存。安卓2.3.3(API级别10)之前,Bitmap像素数据和Bitmap对象是分开存储的,像素数据是存储在native memory中,对象存储在Dalvik heap中,native memory中的像素数据不是以一种可预见的方式释放,可能导致应用程序暂时超过其内存限制和崩溃,所以在Android2.3.3(API 10)之前你必须要调用recycle()方法来释放掉内存避免出现OOM,当然前提是确定这个bitmap不再使用,否则会出现 "Canvas: trying to use a recycled bitmap". 在Android3.0(API 11)之后,Bitmap的像素数据和Bitmap对象一起存储在Dalvik heap中,所以我们不用手动调用recycle()来释放Bitmap对象,内存的释放都交给垃圾回收器来做。

 

        以上是学习Bitmap的一些基础知识和加载到手机内存中需要注意的事项,下一篇博客我会写如何更好的加载Bitmap,怎样省内存,怎样高效。谢谢大家的浏览,写的不好的地方和有任何疑问请留言或者更快的与我交流请添加:coder_online 微信公众号,这里不仅有我的文章,还有我的小伙伴们的,各种技术分享,不妨你来看看,我们期待你的到来。也可以扫描下面的二维码,duang的一下就找到我们了。。。。。。。

 

                                                

摘自:http://my.oschina.net/u/2335795/blog/400810

分享到:
评论

相关推荐

    Android技术内幕.系统卷(扫描版)

    第1章 准备工作 /1 1.1 深入认识android /2 1.1.1 android的系统构架 /2 1.1.2 android的初始化流程 /5 1.1.3 各个层次之间的相互关系 /8 1.1.4 android系统开发(移植)和应用开发 /11 1.2 获取和编译android的源码...

    Android技术内幕.系统卷(清晰版扫描版)

    例如,获取Android源代码并搭建开发环境是研究Android系统的第一步。随后,分析Android内核机制、Binder通信机制、电源管理模块、硬件设备驱动以及原生库等底层模块,是深入理解Android系统运行原理的核心。 系统卷...

    《android技术内幕》系统卷(完整版)电子书

    《Android技术内幕》系统卷是一本深度探讨Android操作系统核心机制的专业书籍,对于想要深入了解Android系统的开发者来说,无疑是一份宝贵的资源。这本书全面覆盖了Android系统的各个方面,包括系统架构、进程管理、...

    Android技术内幕 第3章

    然而,为了更好地适应移动设备的特点,Android开发团队设计了一种专门用于Android平台的IPC机制——Binder。 #### 3.1.1 为什么选择Binder Binder机制之所以成为Android系统中首选的IPC机制,主要是因为它具有以下...

    Android技术内幕.系统卷 pdf

    第1章 准备工作 /1 1.1 深入认识android /2 1.1.1 android的系统构架 /2 1.1.2 android的初始化流程 /5 1.1.3 各个层次之间的相互关系 /8 1.1.4 android系统开发(移植)和应用开发 /11 1.2 获取和编译android...

    Android技术内幕.系统+深入理解Android.rar

    系统+深入理解》是一本深入探讨Android操作系统和应用开发的书籍,旨在帮助开发者们深入了解Android系统的运行机制以及如何优化应用程序。这本书涵盖了Android的各个方面,从底层架构到上层应用开发,提供了丰富的...

    Android技术内幕.系统卷

    具体而言,系统卷第1章首先从宏观上介绍了Android系统的架构以及各个层次之间的关系,然后介绍了如何获取Android源代码并搭建Android源代码开发环境和阅读环境的方法;第2章有针对性地剖析了Android的内核机制和结构...

    Android技术内幕:系统卷.pdf 详细书签

     具体而言,系统卷第1章首先从宏观上介绍了Android系统的架构以及各个层次之间的关系,然后介绍了如何获取Android源代码并搭建Android源代码开发环境和阅读环境的方法;第2章有针对性地剖析了Android的内核机制和...

    Android SDK开发物超所值的几本好书3

    2. **《第一行代码:Android》**: 郭霖的这部作品以实践为主,讲解了Android开发中的各种常见问题和解决方法,涵盖内容广泛,包括Activity、Intent、BroadcastReceiver、Service、ContentProvider等核心组件,还有...

    Android应用开发新路线(用HTML5开发Android应用)

    杨丰盛作为在移动互联网领域有着丰富开发经验的专家,他的经验和作品《Android应用开发揭秘》《Android技术内幕:系统卷》等书籍为后学者提供了宝贵的学习资源。此外,通过微博等社交媒体平台,杨丰盛与业界同行和...

    Android SDK开发物超所值的几本好书1

    1. **《第一行代码:Android》**:郭霖编著的这本书是Android初学者的入门佳选。书中详细讲解了Android开发的基础知识,包括环境搭建、UI设计、数据存储、网络编程以及一些常见的组件使用,对新手友好,实例丰富,有...

    Android技术内幕.系统卷 - 书签版

    具体而言,系统卷第1章首先从宏观上介绍了Android系统的架构以及各个层次之间的关系,然后介绍了如何获取Android源代码并搭建Android源代码开发环境和阅读环境的方法;第2章有针对性地剖析了Android的内核机制和结构...

    android行业分析

    1.6. 福布斯:摩托罗拉招聘Android开发人员内幕 16 1.7. 编者注: 17 2. android职业分析 17 2.1. 从Google Analytics看国内Android开发人员分布 18 2.2. 关于网龙android项目组分析 19 2.3. 编者注: 20 3. 移动...

    Android技术内幕·系统卷---样章

    这本书是中国第一本全面剖析Android源代码的技术专著,对于想要深入研究Android开发的工程师来说,具有极高的学习价值。 样章通常包括部分内容,可能涵盖了Android系统的关键组件和技术,如: 1. **Linux内核**:...

    android技术内幕:系统卷-第三章Binder

    在Android开发中,使用Binder机制来实现进程间通信通常需要经过以下几个步骤: 1. **定义IBinder接口**:首先定义一个IBinder接口,描述服务提供的方法。 2. **实现服务端**:在服务端实现IBinder接口,并注册...

    Android之父深入解析Android--mayandong

    《Android之父深入解析Android--mayandong》这本书是由安卓系统的创始人所著,为我们揭示了Android操作系统的深层次原理和开发内幕。作为一名专业的IT行业人士,深入理解Android系统对于移动开发至关重要,尤其是...

    VC技术内幕(第四版)

    《VC技术内幕(第四版)》是一本深入探讨VC++编程技术的专业书籍,该书的出版标志着对C++编程领域的一次重要更新与深化。在IT行业,尤其是软件开发领域,VC++作为Microsoft Visual C++的简称,是Windows平台下进行...

    基于Android的新闻APP开题报告.docx

    《Android应用开发实战》第一版 李宁 机械工业出版社 《Android技术内幕:系统卷》 杨丰盛 机械工业出版社 《Android开发精要》 范怀宇 机械工业出版社 《Android开发权威指南》 李宁 人民邮电出版社 《Android ...

    毕业设计(论文)--基于android的信息专业英语词典的设计与开发.doc

    本毕业设计的主要任务是开发一个基于 Android 平台的信息专业英语词典,以提供方便的随时随地查询和识记信息专业词汇的方式。该词典应包括信息专业词汇及术语互译、词条简介、词汇分类等基本功能,並且用户可以自由...

Global site tag (gtag.js) - Google Analytics