Android異步加載數(shù)據(jù)和圖片的保存思路詳解
把從網(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對(duì)象,調(diào)用setAdapter()方法,設(shè)置一個(gè)適配器
新建一個(gè)包 Adapter,新建一個(gè)適配器ContactsAdapter繼承系統(tǒng)的BaseAdapter
新建一個(gè)domain包,新建一個(gè)Contact的javaBean,屬性id,name,image,有參構(gòu)造函數(shù)
新建一個(gè)service包,新建一個(gè)ContactService業(yè)務(wù)類,新建一個(gè)靜態(tài)方法getContacts(),獲取聯(lián)系人的,getImages()獲取圖片
開啟新線程,使用ContactService.getContacts()里面實(shí)現(xiàn)獲取網(wǎng)絡(luò)數(shù)據(jù),返回List對(duì)象,使用Handler傳遞數(shù)據(jù)給主線程
創(chuàng)建緩存圖片的SD卡目錄
獲取File對(duì)象,通過(guò)new File(),獲取到SD卡根目錄下面的cache文件夾,參數(shù):
Environment.getExternalStorageDirectory(),”cache”文件夾名稱
調(diào)用File對(duì)象的exists()方法,判斷目錄是否存在,不存在就創(chuàng)建,調(diào)用File對(duì)象的mkdirs()
展示ListView
設(shè)置ContactsAdapter類的構(gòu)造函數(shù),傳遞進(jìn)去參數(shù):數(shù)據(jù),布局文件,緩存目錄FIle對(duì)象
重寫getCount()方法,return數(shù)據(jù)的條數(shù)
重寫getItem()方法,返回 根據(jù)索引得到的集合中的數(shù)據(jù),List對(duì)象的get()方法,參數(shù):索引
重寫getItemId()方法,一般返回?cái)?shù)據(jù)的索引
重寫getView()方法,傳遞進(jìn)來(lái)的參數(shù):position索引,convertView
convertView是緩存的View對(duì)象,當(dāng)?shù)谝黄恋臅r(shí)候,該View對(duì)象為null,判斷如果為null,就調(diào)用布局填充器來(lái)填充條目布局文件。
通過(guò)該View對(duì)象找到控件對(duì)象,放到包裝對(duì)象中
因?yàn)閒indViewById()方法是很耗性能的,所以,使用內(nèi)部類DataWrapper來(lái)包裝一下找到的兩個(gè)控件對(duì)象
然后調(diào)用緩存后的View對(duì)象的setTag()方法,參數(shù):包裝對(duì)象
如果緩存 對(duì)象不為null,就調(diào)用緩存對(duì)象的getTag()方法,得到包裝對(duì)象,得到控件對(duì)象
調(diào)用TextView對(duì)象的setText()展示文本
展示圖片這個(gè)地方,很耗時(shí)間,如果直接加載容易anr,所以要異步加載圖片
異步加載并保存圖片
開啟線程執(zhí)行加載圖片的代碼
在ContactService業(yè)務(wù)類里實(shí)現(xiàn)getImage()方法,通過(guò)get方式讀取圖片,得到Uri對(duì)象,參數(shù):圖片路徑,
獲取本地文件File對(duì)象,通過(guò)new FIle(),參數(shù):緩存目錄對(duì)象,圖片文件名稱
圖片的文件名稱是通過(guò)md5()保存的,獲取文件后綴,從最后一個(gè)點(diǎn)開始截取,path.substring(path.lastIndexOf(“.”))
判斷文件存在就直接返回該文件的Uri對(duì)象,調(diào)用Uri.fromFile(),參數(shù):File對(duì)象
get獲取網(wǎng)絡(luò)數(shù)據(jù),得到輸入流,循環(huán)讀取保存
讀取輸入流寫到文件輸出流中
返回Uri對(duì)象
在子線程中無(wú)法更新UI,采用Handler技術(shù)更新UI
在Handler內(nèi)部類里面的handleMessage方法里,獲取到Uri對(duì)象
調(diào)用ImageView對(duì)象的setImageUri()方法,展示圖片,參數(shù):Uri對(duì)象
清除緩存
當(dāng)activity退出的時(shí)候,清除掉所有的緩存文件
重寫activity的onDestroy()方法
循環(huán)for(File file:cache:listFiles())中,調(diào)用File對(duì)象的delete()方法
刪除掉緩存目錄
此時(shí)如果數(shù)目特別多,會(huì)開啟很多的線程,同樣很消耗資源
AsyncTask技術(shù)采用 (Handler + Thread + 線程池),限定線程的開啟數(shù)量
今天大概介紹了Android異步加載數(shù)據(jù)和圖片的保存思路,后續(xù)會(huì)給大家整理具體實(shí)現(xiàn)代碼,更多精彩信息敬請(qǐng)關(guān)注腳本之家網(wǎng)站!
- Android開發(fā)中ImageLoder進(jìn)行圖片加載和緩存
- 深入剖析Android的Volley庫(kù)中的圖片加載功能
- Android圖片加載緩存框架Glide
- Android圖片加載的緩存類
- Android程序開發(fā)ListView+Json+異步網(wǎng)絡(luò)圖片加載+滾動(dòng)翻頁(yè)的例子(圖片能緩存,圖片不錯(cuò)亂)
- 全面總結(jié)Android中線程的異步處理方式
- Android中ListView異步加載圖片錯(cuò)位、重復(fù)、閃爍問(wèn)題分析及解決方案
- android異步請(qǐng)求服務(wù)器數(shù)據(jù)示例
- android開發(fā)教程之handle實(shí)現(xiàn)多線程和異步處理
- Android 異步加載圖片分析總結(jié)
- Android 異步獲取網(wǎng)絡(luò)圖片并處理導(dǎo)致內(nèi)存溢出問(wèn)題解決方法
- Android App中實(shí)現(xiàn)圖片異步加載的實(shí)例分享
相關(guān)文章
Android獲取點(diǎn)擊屏幕的位置坐標(biāo)
這篇文章主要為大家詳細(xì)介紹了Android獲取點(diǎn)擊屏幕的位置坐標(biāo),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-05-05
Android基準(zhǔn)配置文件Baseline?Profile方案提升啟動(dòng)速度
這篇文章主要為大家介紹了Android基準(zhǔn)配置文件Baseline?Profile方案提升啟動(dòng)速度示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02
Kotlin示例講解標(biāo)準(zhǔn)函數(shù)with與run和apply的使用
Kotlin的標(biāo)準(zhǔn)函數(shù)是指 Standard.kt 文件中定義的函數(shù),任何Kotlin代碼都可以自由地調(diào)用所有的標(biāo)準(zhǔn)函數(shù)。文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧2022-08-08
Android 日期和時(shí)間的使用實(shí)例詳解
這篇文章主要介紹了Android 日期和時(shí)間的使用實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下2016-12-12
為Android的apk應(yīng)用程序文件加殼以防止反編譯的教程
這篇文章主要介紹了為Android的apk應(yīng)用程序文件加殼以防止反編譯的教程,同時(shí)對(duì)apk程序的解殼操作也有詳細(xì)講解,需要的朋友可以參考下2016-04-04
Android自定義viewgroup 使用adapter適配數(shù)據(jù)(6)
這篇文章主要為大家詳細(xì)介紹了Android自定義viewgroup,使用adapter適配數(shù)據(jù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-12-12
解決Android studio xml界面無(wú)法預(yù)覽問(wèn)題
這篇文章主要介紹了解決Android studio xml界面無(wú)法預(yù)覽問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-03-03

