這是用Thread、Handler、Message自己實現圖片加載功能,且包含了內存緩存和圖片壓縮,實際上也就是實現了一個圖片加載庫,幫助我們搞清楚原理,在不清楚原理的情況下可以用第三方庫直接在GridView顯示本地圖片,但要注意不要使用磁盤緩存...
2016-03-23
其實用HandlerThread實現和用Thread+Handler機制是一樣的。用HandlerThread,其實也是創建了Thread,Thread里創建了Looper對象,然后將線程的Looper對象傳遞給Handler,自然handler的消息處理是在子線程中執行了。
學習要知其然,更要知其所以然。
學習要知其然,更要知其所以然。
2016-03-11
這里我說一下UI線程中Handler的創建和子線程中Handler的創建。其實,這個Util里,初始化UI Handler的時候,應該如下:
mUIHandler = new Handler(Looper.getMainLooper());
是為了防止這個類在子線程中調用,導致UI Handler失效。
看過Handler、Looper、Message源碼的同學應該知道,Handler默認構造函數中,會獲取當前所在線程的Looper作為自己的Looper對象。所以,Handler在UI線程中初始化,獲取的是UI的Looper,在子線程中初始化,獲取的是子線程的Looper。
mUIHandler = new Handler(Looper.getMainLooper());
是為了防止這個類在子線程中調用,導致UI Handler失效。
看過Handler、Looper、Message源碼的同學應該知道,Handler默認構造函數中,會獲取當前所在線程的Looper作為自己的Looper對象。所以,Handler在UI線程中初始化,獲取的是UI的Looper,在子線程中初始化,獲取的是子線程的Looper。
2016-03-11
這個地方有點歧義,holder獲取的path bitmap和imageview與之前的path iamgeview沒有區分清楚
if(imageview.getTag().toString().equals(path))
這個方法中imageview是哪個imageview沒有說清楚,容易引起誤會,path是哪個path也沒有說清楚
if(imageview.getTag().toString().equals(path))
這個方法中imageview是哪個imageview沒有說清楚,容易引起誤會,path是哪個path也沒有說清楚
2016-03-02