android加载更多的图片
这是昨天改进后的,我测试了下,可以加载图片到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加载更多的图片的更多相关文章
- Android加载/处理超大图片神器!SubsamplingScaleImageView(subsampling-scale-image-view)【系列1】
Android加载/处理超大图片神器!SubsamplingScaleImageView(subsampling-scale-image-view)[系列1] Android在加载或者处理超大巨型图片 ...
- ajax点击加载更多数据图片(预加载)
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- Android UI--自定义ListView(实现下拉刷新+加载更多)
Android UI--自定义ListView(实现下拉刷新+加载更多) 关于实现ListView下拉刷新和加载更多的实现,我想网上一搜就一堆.不过我就没发现比较实用的,要不就是实现起来太复杂,要不就 ...
- [Android] Android 支持下拉刷新、上拉加载更多 的 XRecyclerview
XRecyclerView一个实现了下拉刷新,滚动到底部加载更多以及添加header功能的的RecyclerView.使用方式和RecyclerView完全一致,不需要额外的layout,不需要写特殊 ...
- Android 开发 上拉加载更多功能实现
实现思维 开始之前先废话几句,Android系统没有提供上拉加载的控件,只提供了下拉刷新的SwipeRefreshLayout控件.这个控件我们就不废话,无法实现上拉刷新的功能.现在我们说说上拉加载更 ...
- android 加载图片框架--Glide使用详解
一.简介 Glide,一个被google所推荐的图片加载库,作者是bumptech.这个库被广泛运用在google的开源项目中,包括2014年的google I/O大会上发布的官方app.(PS:众所 ...
- Android学习笔记_51_转android 加载大图片防止内存溢出
首先来还原一下堆内存溢出的错误.首先在SD卡上放一张照片,分辨率为(3776 X 2520),大小为3.88MB,是我自己用相机拍的一张照片.应用的布局很简单,一个Button一个ImageView, ...
- Android之Socket通信、List加载更多、Spinner下拉列表
Android与服务器的通信方式主要有两种,一是Http通信,一是Socket通信.两者的最大差异在于,http连接使用的是“请求—响应方式”,即在请求时建立连接通道,当客户端向服务器发送请求后,服务 ...
- Android ListView加载更多
先看效果: ListView的footer布局: <?xml version="1.0" encoding="utf-8"?> <Relati ...
随机推荐
- php cli模式没有加载php.ini
这两天在虚拟机的linux里编译安装了php,同时也把swoole的扩展也编译上了.在/etc/php.ini里加上了extension=swoole.so,但是用php -m 查看加载的模块并没有s ...
- Oracle EBS-SQL (WIP-6):检查任务已完成但状态是发放的任务.sql
select WE.WIP_ENTITY_NAME ,MSI.SEGMENT1 ,MSI.DESCRIPTION ,WDJ.CLASS_CODE ...
- Aix_bugzilla
原创作品,转载请注明出处! Bugzilla在AIX上部署,网上看到的不多.我耗费了很长时间才算部署完,记录在这里,以防忘记了. 一. 下载安装文件或源代码 1. 下载Bugzilla 3.6. ...
- iOS 开发的几种手势
今天为大家介绍一下IOS 的七种手势,手势在开发中经常用到,所以就简单 通俗易懂的说下, 话不多说,直接看代码: // 初始化一个UIimageView UIImageView *imageView ...
- UCS2转UTF-8方法
前两天工作时需要将UCS2编码转为UTF-8编码在网页显示.网上找了好久没有好方法,后来还是同事给了一个自己的函数,顺利解决问题.把函数贴在这里,愿帮助遇到同样问题的工友们~ /** * U ...
- LINQ查询操作符 LINQ学习第二篇[转]
一.投影操作符 1. Select Select操作符对单个序列或集合中的值进行投影.下面的示例中使用select从序列中返回Employee表的所有列: using (NorthwindDataCo ...
- django中怎样生成非HTML格式的内容。
某些时候可能有这种需求.在网页中点击一个链接或者一个button希望返回一张图片.一个pdf文档.一个csv文档等而非HTML. 在diango中非常easy做到这些.django中的view用来接收 ...
- Moss 几个编程技巧
1.提升权限执行的代码 SPSecurity.RunWithElevatedPrivileges(delegate() { // 需要提升权限执行的代码 }); 应用场景:当前用户可能没有权限执行的操 ...
- Quartz 2D 概述
Quartz 2D是一个二维图形绘制引擎,支持iOS环境和Mac OS X环境.我们可以使用Quartz 2D API来实现许多功能,如基本路径的绘制.透明度.描影.绘制阴影.透明层.颜色管理.反锯齿 ...
- (转)C#DataTable学习心得
一.DataSet.DataTable.DataRow.DataColumn 1] 在DataSet中添加DataTable DataSet.Tables.Add(DataTable) 实例: Dat ...