android优化从网络中加载图片速度。。

从网络中加载图片主要要注意两个方面的问题:

1.内存管理:图片占的内存很大,假如图片数量多,很容易让系统抛出out of memory的异常。

同时我们也要注意不同android版本中内存管理的区别。

2.性能:图片的加载速度,和加载图片时不影响UI的流畅性

尤其是在ViewPager,GridView 和ListView等等需要在短时间内加载大量图片时,上面两个问题就更加突出了。。。

要解决上面这个两个问题,我们要用到的技术

1.缩减加载的图片的bitmap

可以通过实现显示图片的view的大小来计算所需的bitmap,还有可以只首先生成缩略图的方式。

2.使用memoryCache和diskCache(防止activity被外来事件(比如电话)中断后导致内存缓存数据被清除时,

能尽快恢复过来,不要再去网络中拉取图片数据)。

可以使用系统提供的支持类LruCache和DiskLruCache(android.support.v4),在使用缓存还需要注意

多线程同步的问题(在短时间内间需要发出多个线程,并且这些线程都同时使用一块内存)。

3.I/O操作使用异步加载图片数据,防止阻塞UI线程。

等等。。。。。。

最后引用android官网的对位图内存管理的一段话:

To set the stage for this lesson, here is how Android‘s management of bitmap
memory has evolved:

  • On Android Android 2.2 (API level 8) and lower, when garbage collection
    occurs, your app‘s threads get stopped. This causes a lag that can degrade
    performance. Android 2.3 adds concurrent garbage collection, which
    means that the memory is reclaimed soon after a bitmap is no longer
    referenced.

  • On Android 2.3.3 (API level 10) and lower, the backing pixel data for a
    bitmap is stored in native memory. It is separate from the bitmap itself,
    which is stored in the Dalvik heap. The pixel data in native memory is not
    released in a predictable manner, potentially causing an application to
    briefly exceed its memory limits and crash. As of Android 3.0 (API
    level 11), the pixel data is stored on the Dalvik heap along with the
    associated bitmap.

上面的话,大体的意思是在android2.2以及之前的版本,android进行垃圾回收会导致应用程序的线程产生停顿现象。在android2.3以及以后版本垃圾回收是并发的,不会影响到应用线程,可能会导致没有引用的位图数据会很快被回收。

在adroid2.3.3以及之前的版本像素数据是存在本地内存的,这样导致不会被释放,可能会导致应用程序内存溢出而崩溃。到了android3.0以后像素数据和位图数据一样是保存在java堆中。

详细的介绍请看官网上面的说明http://developer.android.com/training/displaying-bitmaps/index.html

时间: 2024-11-08 00:41:06

android优化从网络中加载图片速度。。的相关文章

Android设置Notification从网络中加载图片,解决点击无法消失的bug

Notification的构造函数中只支持使用资源文件的图片作为图片,但是如果我们想用网络中的图片怎么办呢. 我们知道,给Notification设置内容的时候调用的是setLatestEventInfo方法,当我们点击去看该方法的时候,所有的结果都一目了然了. public void setLatestEventInfo(Context context, CharSequence contentTitle, CharSequence contentText, PendingIntent con

android listview 滑动过程中不加载图片,停止时加载图片

今天闲来无事, 就测试了一下listview加载图片优化的功能, 在我们使用新浪微博的时候,细心的同学一定发现了,在滑动的过程中,图片是没有被加载的, 而是在滑动停止时,才加载图片了. 我们今天就做一个这样的效果吧. 我们先考虑两个问题: 1.在滑动停止的时候,如何获得需要加载的图片控件? 2.因为listiew在初始化完成的时候,OnScrollListener的onScrollStateChanged与onScroll并未被触发,如何初始化第一页的图片? package com.test.l

android 队列模仿listview同步加载图片

我们今天在listview加载图片都是异步的,如果有个需求要求listview同步加载图片,同步加载图片是什么意思呢?就是第一张图片下载好了,然后接着第二张图片下载,依次类推,今天就简单的模仿写个简单的,而且下载的图片还要缓存到SD卡中 思路: 队列是用LinkedList集合模拟, 缓存:当图片下载成功了把当前图片对应的url经过md5加密存到sd卡中的某个子文件夹下,当用户再次进来的时候,可以adapter中判断这个url是否存在,如果存在就加载这个url对应的图片,就达到了缓存的目的 代码

Android开源框架ImageLoader:加载图片的三级缓存机制

前言:可从  https://github.com/nostra13/Android-Universal-Image-Loader 下载三级缓存机制的开源框架.下文简单介绍该框架中主要的常用方法,掌握这些方法,基本就可应对多数图片下载的需求. 注意:以下代码为示意代码片断,仔细读一下应能知道怎么用.蓝色表示为开源框架中的类. 1.初始化ImageLoader类对象: ImageLoader imageLoader = ImageLoader.getInstance(); imageLoader.

Android学习笔记---使用Volley加载图片

Volley加载图片 ImageLoader使用法ImageLoader imageLoader = new ImageLoader(requestQueue,new ImageLoood()); ImageLoader.ImageListener imageListener = imageLoader.getImageListener(imageView,R.mipmap.ic_launcher,R.mipmap.ic_launcher); imageLoader.get(strUrl,ima

IOS-SDWebImage根据网络状态加载图片

iOS开发-你真的会用SDWebImage? 2016-05-17 hosea_zhou 有意思啊 原创作者:hosea_zhou 原文地址:http://www.jianshu.com/p/dabc0c6d083e 猿吧 - 资源共享论坛: http://www.coderbar.cn 最近论坛里有最新的视频资料哦! SDWebImage作为目前最受欢迎的图片下载第三方框架,使用率很高.但是你真的会用吗?本文接下来将通过例子分析如何合理使用SDWebImage. 使用场景:自定义的UITabl

android:scaleType="matrix"布局文件加载图片时候的显示方式

android:scaleType="center" 以原图的几何中心点和ImagView的几何中心点为基准,按图片的原来size居中显示,不缩放,当图片长/宽超过View的长/宽,则截取图片的居中部分显示ImageView的size.当图片小于View 的长宽时,只显示图片的size,不剪裁. android:scaleType="centerCrop" 以原图的几何中心点和ImagView的几何中心点为基准,按比例扩大(图片小于View的宽时)图片的size居中

el-table中加载图片问题

<el-table-column label="头像" width="100"> <template scope="scope"> <img :src="scope.row.img" width="50" height="50" class="img"/> </template> </el-table-column

xcode 7.2 怎么在Playground 中加载图片

在Playground文件所在里的地方 如果忘记保存到哪里了 Show File Inspector 可以打开面板 上面有一个Full Path 就是文件路径 (点击右下角小箭头就会直接打开了) 右键点击name.playgournd 文件-> 显示包内容 这里如果没有Resources 这个文件夹 就创建一个 然后在里面添加的图片就可以用了 在 Image Asset 的面板上也可以看的到了 纯原创 转载请注明