当前位置: 移动技术网 > IT编程>移动开发>Android > Android异步加载数据和图片的保存思路详解

Android异步加载数据和图片的保存思路详解

2019年07月24日  | 移动技术网IT编程  | 我要评论

余干县人民政府,英国旅游攻略,陈德荣任天津市委常委

把从网络获取的图片数据保存在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异步加载数据和图片的保存思路,后续会给大家整理具体实现代码,更多精彩信息敬请关注移动技术网网站!

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网