編輯:關於android開發
把從網絡獲取的圖片數據保存在SD卡上,
先把權限都加上
網絡權限 android.permission.INTERNET
SD卡讀寫權限
android.permission.MOUNT_UNMOUNT_FILESYSTEMS
android.permission.WRITE_EXTERNAL_STORAGE
總體布局
寫界面,使用ListView,創建條目的布局文件,水平擺放的ImageView TextView
在activity中獲取到ListView對象,調用setAdapter()方法,設置一個適配器
新建一個包 Adapter,新建一個適配器ContactsAdapter繼承系統的BaseAdapter
新建一個domain包,新建一個Contact的javaBean,屬性id,name,image,有參構造函數
新建一個service包,新建一個ContactService業務類,新建一個靜態方法getContacts(),獲取聯系人的,getImages()獲取圖片
開啟新線程,使用ContactService.getContacts()裡面實現獲取網絡數據,返回List對象,使用Handler傳遞數據給主線程
創建緩存圖片的SD卡目錄
獲取File對象,通過new File(),獲取到SD卡根目錄下面的cache文件夾,參數:
Environment.getExternalStorageDirectory(),”cache”文件夾名稱
調用File對象的exists()方法,判斷目錄是否存在,不存在就創建,調用File對象的mkdirs()
展示ListView
設置ContactsAdapter類的構造函數,傳遞進去參數:數據,布局文件,緩存目錄FIle對象
重寫getCount()方法,return數據的條數
重寫getItem()方法,返回 根據索引得到的集合中的數據,List對象的get()方法,參數:索引
重寫getItemId()方法,一般返回數據的索引
重寫getView()方法,傳遞進來的參數:position索引,convertView
convertView是緩存的View對象,當第一屏的時候,該View對象為null,判斷如果為null,就調用布局填充器來填充條目布局文件。
通過該View對象找到控件對象,放到包裝對象中
因為findViewById()方法是很耗性能的,所以,使用內部類DataWrapper來包裝一下找到的兩個控件對象
然後調用緩存後的View對象的setTag()方法,參數:包裝對象
如果緩存 對象不為null,就調用緩存對象的getTag()方法,得到包裝對象,得到控件對象
調用TextView對象的setText()展示文本
展示圖片這個地方,很耗時間,如果直接加載容易anr,所以要異步加載圖片
異步加載並保存圖片
開啟線程執行加載圖片的代碼
在ContactService業務類裡實現getImage()方法,通過get方式讀取圖片,得到Uri對象,參數:圖片路徑,
獲取本地文件File對象,通過new FIle(),參數:緩存目錄對象,圖片文件名稱
圖片的文件名稱是通過md5()保存的,獲取文件後綴,從最後一個點開始截取,path.substring(path.lastIndexOf(“.”))
判斷文件存在就直接返回該文件的Uri對象,調用Uri.fromFile(),參數:File對象
get獲取網絡數據,得到輸入流,循環讀取保存
讀取輸入流寫到文件輸出流中
返回Uri對象
在子線程中無法更新UI,采用Handler技術更新UI
在Handler內部類裡面的handleMessage方法裡,獲取到Uri對象
調用ImageView對象的setImageUri()方法,展示圖片,參數:Uri對象
清除緩存
當activity退出的時候,清除掉所有的緩存文件
重寫activity的onDestroy()方法
循環for(File file:cache:listFiles())中,調用File對象的delete()方法
刪除掉緩存目錄
此時如果數目特別多,會開啟很多的線程,同樣很消耗資源
AsyncTask技術采用 (Handler + Thread + 線程池),限定線程的開啟數量
代碼正在整理。。。
Android應用開發allowBackup敏感信息洩露的一點反思 1 背景 其實這篇文章可能有些小題大作,但回過頭想想還是很有必要的,有點陰溝裡翻船的感覺。相信大家都
ELK Stack最新版本測試一安裝篇咱們廢話少說,直接切入正題先看版本filebeat1.0.0-rc2 logstash2.0.0-1 elasticsearch2.
今天我用自己寫的一個Demo 和大家詳細介紹一個Android開發中遇到的一些常用系統控件的使用技
android ndk開發(二)實現一個官方demo,androidndk實現了一個官方的demo:bitmap-plasma(水波紋) 源代碼就在samples文件夾下