这是昨天改进后的,我测试了下,可以加载图片到5万张,估计5万以上也是没问题的,我只试到5万,其实也没必要这么高,现实中1000左右就差不多了,不过我的应用到100就差不多了,

package com.lanlong.test;

import java.io.File;
import java.lang.ref.SoftReference;
import java.lang.ref.WeakReference;
import java.util.HashMap;
import java.util.Map;

import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.Matrix;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;

public class AndrodTestActivity extends Activity {
    
    int number = 50000;

Drawable[] array;
    Bitmap [] array2;
    private Map<String, SoftReference<Drawable>> imageCache =
            new HashMap<String, SoftReference<Drawable>>();

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        String iconPath = Environment.getExternalStorageDirectory()
                +"/vpn/Bafangtong/image/weixin.png";
        
//        array = new Drawable[number];//BitmapDrawable 一样

//        array2 = new Bitmap[number];
        File mfile = new File(iconPath);
        Log.i("","mfile.exists() = "+mfile.exists());
        
        Drawable draw = null;
        long timeBegin = System.currentTimeMillis();
        
        for(int i = 0; i < number; i++)

{

Log.e("", "测试第" + (i+1) + "张图片");
            // time = 2second 10000张    8second 50000张  不到1秒,    29ms 100张
//            array[i] = getResources().getDrawable(R.drawable.ic_launcher);//1000 ok
//            array2[i] = BitmapFactory.decodeFile(iconPath);//max 222
//            zoomImg(array2[i], 800, 480);
//            array[i] = Drawable.createFromPath(iconPath);//max 221
//            array[i] = BitmapDrawable.createFromPath(iconPath);//max  221
            
            
         //time = 149second  ,10000张  ; 1second ,100张 ; 901second ,50000张
            addDrawableToCache(""+i, iconPath);
            draw = getDrawableByPath(""+i, iconPath);
//            array[i] = getBitmapByPath(""+i, iconPath);
            Log.i("","draw = "+draw);
            try {
                
//                array[i] = Drawable.createFromStream(
//                        new FileInputStream(iconPath), iconPath);//max 111
                
//                array[i] = BitmapDrawable.createFromStream(
//                        new FileInputStream(iconPath), iconPath);//max 111
                
                
//                array2[i] = BitmapFactory.decodeStream(
//                        new FileInputStream(iconPath));//max 221 ;
//                Log.i("", "array["+i+"] = "+array[i]);
            } catch (Exception e) {
                // TODO: handle exception
            }
        }
        long timeEnd = System.currentTimeMillis();
        Log.v("","time = "+(timeEnd - timeBegin)/1000 +" second");
    }
      public void addDrawableToCache(String id, String path) {
            // 强引用的Bitmap对象
            Drawable drawable = Drawable.createFromPath(path);
            // 软引用的Bitmap对象
            SoftReference<Drawable> softDrawable = new SoftReference<Drawable>(drawable);
            // 添加该对象到Map中使其缓存
            imageCache.put(id, softDrawable);
            Log.w("","add, imageCache.size() = "+imageCache.size());
        }
      
      public Drawable getDrawableByPath(String id, String path) {
            // 从缓存中取软引用的Bitmap对象
            SoftReference<Drawable> softDrawable = imageCache.get(id);
            // 判断是否存在软引用
            if (softDrawable == null) {
                return null;
            }
            // 取出Bitmap对象,如果由于内存不足Bitmap被回收,将取得空
            Drawable drable = softDrawable.get();
            return drable;
        }
}

android加载更多的图片的更多相关文章

  1. Android加载/处理超大图片神器!SubsamplingScaleImageView(subsampling-scale-image-view)【系列1】

    Android加载/处理超大图片神器!SubsamplingScaleImageView(subsampling-scale-image-view)[系列1] Android在加载或者处理超大巨型图片 ...

  2. ajax点击加载更多数据图片(预加载)

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  3. Android UI--自定义ListView(实现下拉刷新+加载更多)

    Android UI--自定义ListView(实现下拉刷新+加载更多) 关于实现ListView下拉刷新和加载更多的实现,我想网上一搜就一堆.不过我就没发现比较实用的,要不就是实现起来太复杂,要不就 ...

  4. [Android] Android 支持下拉刷新、上拉加载更多 的 XRecyclerview

    XRecyclerView一个实现了下拉刷新,滚动到底部加载更多以及添加header功能的的RecyclerView.使用方式和RecyclerView完全一致,不需要额外的layout,不需要写特殊 ...

  5. Android 开发 上拉加载更多功能实现

    实现思维 开始之前先废话几句,Android系统没有提供上拉加载的控件,只提供了下拉刷新的SwipeRefreshLayout控件.这个控件我们就不废话,无法实现上拉刷新的功能.现在我们说说上拉加载更 ...

  6. android 加载图片框架--Glide使用详解

    一.简介 Glide,一个被google所推荐的图片加载库,作者是bumptech.这个库被广泛运用在google的开源项目中,包括2014年的google I/O大会上发布的官方app.(PS:众所 ...

  7. Android学习笔记_51_转android 加载大图片防止内存溢出

    首先来还原一下堆内存溢出的错误.首先在SD卡上放一张照片,分辨率为(3776 X 2520),大小为3.88MB,是我自己用相机拍的一张照片.应用的布局很简单,一个Button一个ImageView, ...

  8. Android之Socket通信、List加载更多、Spinner下拉列表

    Android与服务器的通信方式主要有两种,一是Http通信,一是Socket通信.两者的最大差异在于,http连接使用的是“请求—响应方式”,即在请求时建立连接通道,当客户端向服务器发送请求后,服务 ...

  9. Android ListView加载更多

    先看效果: ListView的footer布局: <?xml version="1.0" encoding="utf-8"?> <Relati ...

随机推荐

  1. php 文件操作类

    class fileInit { /** * 创建空文件 * @param string $filename 需要创建的文件 * @return */ public function create_f ...

  2. PYthon成长之路第一篇(1)__字符串初识

    今天一起走进python的代码世界,一起领悟python的魅力 在很多学习python的书中都会以 print  “Hello,world!” 这样的而一个程序为开始,那么其中的 hello,worl ...

  3. eclipse中调出android sdk manager和android virtual device manager图标

    有时候在安装ADT插件后,eclipse菜单栏上不会显示android sdk manager和android virtual device manager两个图标, 这个时候,如果安装ADT插件的步 ...

  4. 新手求大神,有其他swit-case的思路写这个程序么?

    两个程序: switch-case与if-else if的区别相同点:可以实现多分支结构;不同点:switch:一般只能用于等值比较.(可以进行范围运算???---学会用switch计算范围出炉的思路 ...

  5. 动画原理——脉动(膨胀缩小)&&无规则运动

    书籍名称:HTML5-Animation-with-JavaScript 书籍源码:https://github.com/lamberta/html5-animation 1.脉动是一种半径r来回反复 ...

  6. bootstrap-js(六)弹出框

    实例 为任意元素添加一小块浮层,用于存放非主要信息. 弹出框的标题和内容的长度都是零的话将永远不会被显示出来. 初始化 由于性能的原因,工具提示和弹出框的 data 编程接口(data api)是必须 ...

  7. Intellij Idea的一些配置

    1.字体 修改IDEA面板字体:Settings->Appearance-> Override default fonts by(not recommended)选中,选择自己喜欢的字体 ...

  8. mysql存储过程和触发器的应用

    ***********[mysql 存储过程和触发器 -- 别安驹]********************* 1.什么情况下使用存储过程? 完成一些比较麻烦的逻辑,比如多表在mysql端的cpu很空 ...

  9. Linux程序设计 读笔1

    第一章 入门 Linux应用程表现为两种特殊类型文件:可执行文件 + 脚本文件 /bin 二进制文件目录,存放启动系统时用到的标准程序 /usr/bin 用户二进制文件目录,存放用户使用的标准程序 / ...

  10. boost signal2 trackable

    挺简单的一个类,只是维护了一个成员 shared_ptr<detail::trackable_pointee> _tracked_ptr; 这样看来的话,所谓的track还是基于智能指针, ...