欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android異步加載數(shù)據(jù)和圖片的保存思路詳解

 更新時間:2016年04月15日 10:47:55   作者:陶士涵  
這篇文章主要介紹了Android異步加載數(shù)據(jù)和圖片的保存思路詳解的相關(guān)資料,需要的朋友可以參考下

把從網(wǎng)絡(luò)獲取的圖片數(shù)據(jù)保存在SD卡上,

先把權(quán)限都加上

網(wǎng)絡(luò)權(quán)限 android.permission.INTERNET

SD卡讀寫權(quán)限

android.permission.MOUNT_UNMOUNT_FILESYSTEMS
android.permission.WRITE_EXTERNAL_STORAGE

總體布局

寫界面,使用ListView,創(chuàng)建條目的布局文件,水平擺放的ImageView TextView

在activity中獲取到ListView對象,調(diào)用setAdapter()方法,設(shè)置一個適配器

新建一個包 Adapter,新建一個適配器ContactsAdapter繼承系統(tǒng)的BaseAdapter

新建一個domain包,新建一個Contact的javaBean,屬性id,name,image,有參構(gòu)造函數(shù)

新建一個service包,新建一個ContactService業(yè)務(wù)類,新建一個靜態(tài)方法getContacts(),獲取聯(lián)系人的,getImages()獲取圖片

開啟新線程,使用ContactService.getContacts()里面實現(xiàn)獲取網(wǎng)絡(luò)數(shù)據(jù),返回List對象,使用Handler傳遞數(shù)據(jù)給主線程

創(chuàng)建緩存圖片的SD卡目錄

獲取File對象,通過new File(),獲取到SD卡根目錄下面的cache文件夾,參數(shù):

Environment.getExternalStorageDirectory(),”cache”文件夾名稱

調(diào)用File對象的exists()方法,判斷目錄是否存在,不存在就創(chuàng)建,調(diào)用File對象的mkdirs()

展示ListView

設(shè)置ContactsAdapter類的構(gòu)造函數(shù),傳遞進(jìn)去參數(shù):數(shù)據(jù),布局文件,緩存目錄FIle對象

重寫getCount()方法,return數(shù)據(jù)的條數(shù)

重寫getItem()方法,返回 根據(jù)索引得到的集合中的數(shù)據(jù),List對象的get()方法,參數(shù):索引

重寫getItemId()方法,一般返回數(shù)據(jù)的索引

重寫getView()方法,傳遞進(jìn)來的參數(shù):position索引,convertView

convertView是緩存的View對象,當(dāng)?shù)谝黄恋臅r候,該View對象為null,判斷如果為null,就調(diào)用布局填充器來填充條目布局文件。

通過該View對象找到控件對象,放到包裝對象中

因為findViewById()方法是很耗性能的,所以,使用內(nèi)部類DataWrapper來包裝一下找到的兩個控件對象

然后調(diào)用緩存后的View對象的setTag()方法,參數(shù):包裝對象

如果緩存 對象不為null,就調(diào)用緩存對象的getTag()方法,得到包裝對象,得到控件對象

調(diào)用TextView對象的setText()展示文本

展示圖片這個地方,很耗時間,如果直接加載容易anr,所以要異步加載圖片

異步加載并保存圖片

開啟線程執(zhí)行加載圖片的代碼

在ContactService業(yè)務(wù)類里實現(xiàn)getImage()方法,通過get方式讀取圖片,得到Uri對象,參數(shù):圖片路徑,

獲取本地文件File對象,通過new FIle(),參數(shù):緩存目錄對象,圖片文件名稱

圖片的文件名稱是通過md5()保存的,獲取文件后綴,從最后一個點開始截取,path.substring(path.lastIndexOf(“.”))

判斷文件存在就直接返回該文件的Uri對象,調(diào)用Uri.fromFile(),參數(shù):File對象

get獲取網(wǎng)絡(luò)數(shù)據(jù),得到輸入流,循環(huán)讀取保存

讀取輸入流寫到文件輸出流中

返回Uri對象

在子線程中無法更新UI,采用Handler技術(shù)更新UI

在Handler內(nèi)部類里面的handleMessage方法里,獲取到Uri對象

調(diào)用ImageView對象的setImageUri()方法,展示圖片,參數(shù):Uri對象

清除緩存

當(dāng)activity退出的時候,清除掉所有的緩存文件

重寫activity的onDestroy()方法

循環(huán)for(File file:cache:listFiles())中,調(diào)用File對象的delete()方法

刪除掉緩存目錄

此時如果數(shù)目特別多,會開啟很多的線程,同樣很消耗資源

AsyncTask技術(shù)采用 (Handler + Thread + 線程池),限定線程的開啟數(shù)量

今天大概介紹了Android異步加載數(shù)據(jù)和圖片的保存思路,后續(xù)會給大家整理具體實現(xiàn)代碼,更多精彩信息敬請關(guān)注腳本之家網(wǎng)站!

相關(guān)文章

最新評論