Imageloader5-ImageLoader的变量初始化
UIHandler可以在loadImage时初始化,其余的变量统一在init方法中初始化。getInstance提供让用户自定义线程池线程数量和加载策略的方法。
public class NewImageLoader {/*** 静态成员变量*/private static NewImageLoader mImageLoader ;/*** 图片缓存的核心类 key为图片的路径 value为图片*/private LruCache<String , Bitmap> mLruCache ;/*** 线程池*/private ExecutorService mThreadPool ;private static final int DEFAULT_THREAD_COUNT = 1;/*** 图片加载策略*/private enum Type{FIFO , LIFO ;}/*** 默认的加载策略*/private Type mType = Type.LIFO ;/*** 任务队列*/private LinkedList<Runnable> mTaskQueue ;/*** 后台轮询线程*/private Thread mPoolThread ;/*** 后台轮询线程的handler ,主要用于接收后台轮询线程的消息后从线程池中取出任务进行执行*/private Handler mPoolThreadHandler ;/*** UI线程的Handler ,主要用与接收消息更新显示图片*/private Handler mUIHandler ;/*** 私有化构造函数,防止外部通过new实例化** 我们希望线程数和图片加载的策略可以由用户指定,我们在实例化ImageLoader传入这两个参数*/private NewImageLoader(int threadCount , Type type){// 初始化ImageLoader的变量init(threadCount , type);}/*** 将获取NewImageLoader实例的方法暴漏给外部,以通过类名.方法名的方式获取NewImageLoader实例** 通过双层判断,第一次 空值判断 可以过滤掉大部分,通过线程同步后,再一次进行空值判断* 可以确保在实例化NewImageLoader时,当有多个线程同时到达时,只有第一个线程实例化NewImageLoader.* 当然也可以将方法设置为同步方法,只不过是这种处理方式更为高效。*/public static NewImageLoader getInstance(){if( mImageLoader == null){synchronized (NewImageLoader.class){if(mImageLoader == null){// 默认一个线程 , 后进先出的加载策略mImageLoader = new NewImageLoader(DEFAULT_THREAD_COUNT ,Type.LIFO);}}}return mImageLoader ;}/*** 接收用户指定线程数和加载策略的 对外提供实例的方法 通过 类名.方法名的方式调用* @param threadCount* @param type* @return*/public static NewImageLoader getInstance(int threadCount , Type type){if( mImageLoader == null){synchronized (NewImageLoader.class){if(mImageLoader == null){// 默认一个线程 , 后进先出的加载策略mImageLoader = new NewImageLoader(threadCount ,type);}}}return mImageLoader ;}/*** 变量初始化 mLruCache mThreadPool mType mTaskQueue mPoolThread mPoolThreadHandler* @param threadCount* @param type*/private void init(int threadCount, Type type) {/*** mLruCache 初始化*/// 获取应用程序最大可用内存int maxMemory = (int) Runtime.getRuntime().maxMemory();int cacheMemory = maxMemory / 8 ;mLruCache = new LruCache<String , Bitmap>(cacheMemory){@Overrideprotected int sizeOf(String key, Bitmap value) {// 计算缓存对象的大小 (每一行占据的字节数* 高度)return value.getRowBytes() * value.getHeight();}} ;/*** mThreadPool 初始化*/mThreadPool = Executors.newFixedThreadPool(threadCount);/*** type 赋值*/mType = type == null ? Type.LIFO : type;/*** mTaskQueue*/mTaskQueue = new LinkedList<Runnable>();/*** mPoolThread 后台轮询线程初始化 利用android异步消息处理框架 Looper+Message+Handler实现*/mPoolThread = new Thread(){@Overridepublic void run() {Looper.prepare();mPoolThreadHandler = new Handler(){@Overridepublic void handleMessage(Message msg) {// TODO 线程池从任务队列中去取出一个任务进行执行}};Looper.loop();}};mPoolThread.start();}}
Imageloader5-ImageLoader的变量初始化相关推荐
- Go 学习笔记(70)— Go 变量声明、变量初始化、值类型变量赋值、指针类型变量赋值
1. 变量声明 要单纯声明一个变量,可以通过 var 关键字,如下所示: var s string 该示例只是声明了一个变量 s,类型为 string,并没有对它进行初始化,所以它的值为 string ...
- c++构造函数以及类中变量初始化顺序
c++构造函数以及类中变量初始化顺序 Submitted by ant on Fri, 03/29/2013 - 20:05 构造函数 c++ 的类提供了一种抽象机制,使用起来要比 c 方便很多.为了 ...
- C代码开发遇到的问题 变量初始化和结构体指针移动
1. 变量初始化 函数内部的变量如果不初始化的话默认不是0而是一个随机值. 下面的程序用来打印一个未初始化的无符号的整型值,执行几遍,每次的结果都会不一样 #include <stdio.h&g ...
- STM32单片机,禁止系统启动时的变量初始化
使用这个功能是在IAP在线升级时需要用的. 最初使用在EEPROM或者FLASH存储一个标志位.程序跳转到BootLoader,BootLoader来判断是否需要升级.这样是可以用的,但是这样有个弊端 ...
- C语言变量初始化是必须的吗?不初始化会怎样?
这个问题很重要!实际上前面讲那么多,其中有一个很重要的目的就是为了讲这个知识点.所谓初始化就是"第一次赋值"的意思.我们先来看一个程序: #include <stdio.h& ...
- static 变量初始化顺序的问题和解决方案
http://www.cppblog.com/yindf/archive/2009/03/20/77304.aspx 最近在coding的时候,写了这么一段代码: A.h 1// A.h 2#incl ...
- 读书笔记_代码大全2第十章_变量初始化
变量初始化原则 声明变量的同时初始化. 在靠近变量第一次使用的位置初始化(就近原则). 最好在靠近变量第一次使用的位置声明和定义变量. 在可能的情况下使用final或const(可以防止变量在初始化之 ...
- python变量初始化_tensorflow之变量初始化(tf.Variable)使用详解
默认本系列的的读者已经初步熟悉tensorflow. 我们通过tf.Variable构造一个variable添加进图中,Variable()构造函数需要变量的初始值(是一个任意类型.任意形状的tens ...
- java 成员变量的初始化_Java类变量和成员变量初始化过程
一.类的初始化 对于类的初始化:类的初始化一般只初始化一次,类的初始化主要是初始化静态成员变量. 类的编译决定了类的初始化过程. 编译器生成的class文件主要对定义在源文件中的类进行了如下的更改: ...
最新文章
- C++标准库math
- EdgeGallery — MEP — 系统架构
- python简单代码 春节集五福-我用 Python 集齐了五福
- Linux系统故障修复-MBR损坏,grub.conf配置文件丢失
- 一台计算机只能安装一块网络接口卡,为什么用路由上网,只有一台电脑可以上去?...
- org.springframework.beans.factory.BeanDefinitionStoreExcept
- 微服务升级优点_微服务–——定义, 原则 和 优点
- UVA10010 Where's Waldorf?【水题】
- iphone各机型参数对比_「科技美学」又是一年“双十一”,畅销机型有哪些?
- 大数据质量管理策略有哪些
- 传微软PK谷歌 将于2014年推出智能眼镜
- java中递归算法_java中递归算法是什么怎么算的?
- cad图形如何导入到奥维地图_CAD图导入奥维简易操作步骤--陈浩
- 关于AutoCAD软件的PDF打印机的问题
- 未来20年内,无人驾驶将颠覆这33大行业
- ChucK初步(8)
- 【mysql】mysql 导出全库表结构,并排除指定库
- dataframe更改columns
- 中小型服装店如何选择管理软件?
- oracle 基础语法(二)