日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Imageloader5-ImageLoader的变量初始化

發(fā)布時間:2025/3/21 编程问答 56 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Imageloader5-ImageLoader的变量初始化 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

UIHandler可以在loadImage時初始化,其余的變量統(tǒng)一在init方法中初始化。getInstance提供讓用戶自定義線程池線程數(shù)量和加載策略的方法。

public class NewImageLoader {/*** 靜態(tài)成員變量*/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 ;/*** 任務(wù)隊列*/private LinkedList<Runnable> mTaskQueue ;/*** 后臺輪詢線程*/private Thread mPoolThread ;/*** 后臺輪詢線程的handler ,主要用于接收后臺輪詢線程的消息后從線程池中取出任務(wù)進行執(zhí)行*/private Handler mPoolThreadHandler ;/*** UI線程的Handler ,主要用與接收消息更新顯示圖片*/private Handler mUIHandler ;/*** 私有化構(gòu)造函數(shù),防止外部通過new實例化** 我們希望線程數(shù)和圖片加載的策略可以由用戶指定,我們在實例化ImageLoader傳入這兩個參數(shù)*/private NewImageLoader(int threadCount , Type type){// 初始化ImageLoader的變量init(threadCount , type);}/*** 將獲取NewImageLoader實例的方法暴漏給外部,以通過類名.方法名的方式獲取NewImageLoader實例** 通過雙層判斷,第一次 空值判斷 可以過濾掉大部分,通過線程同步后,再一次進行空值判斷* 可以確保在實例化NewImageLoader時,當有多個線程同時到達時,只有第一個線程實例化NewImageLoader.* 當然也可以將方法設(shè)置為同步方法,只不過是這種處理方式更為高效。*/public static NewImageLoader getInstance(){if( mImageLoader == null){synchronized (NewImageLoader.class){if(mImageLoader == null){// 默認一個線程 , 后進先出的加載策略mImageLoader = new NewImageLoader(DEFAULT_THREAD_COUNT ,Type.LIFO);}}}return mImageLoader ;}/*** 接收用戶指定線程數(shù)和加載策略的 對外提供實例的方法 通過 類名.方法名的方式調(diào)用* @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 初始化*/// 獲取應(yīng)用程序最大可用內(nèi)存int maxMemory = (int) Runtime.getRuntime().maxMemory();int cacheMemory = maxMemory / 8 ;mLruCache = new LruCache<String , Bitmap>(cacheMemory){@Overrideprotected int sizeOf(String key, Bitmap value) {// 計算緩存對象的大小 (每一行占據(jù)的字節(jié)數(shù)* 高度)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實現(xiàn)*/mPoolThread = new Thread(){@Overridepublic void run() {Looper.prepare();mPoolThreadHandler = new Handler(){@Overridepublic void handleMessage(Message msg) {// TODO 線程池從任務(wù)隊列中去取出一個任務(wù)進行執(zhí)行}};Looper.loop();}};mPoolThread.start();}}

總結(jié)

以上是生活随笔為你收集整理的Imageloader5-ImageLoader的变量初始化的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。