Android核心基础-7.Android 网络通信-8.下载
2015-08-04 23:01
260 查看
八、基于HTTP协议下载
8.1 使用开源框架AsyncHttpClient下载
public void download(View v) { String path = pathET.getText().toString().trim(); File file = new File("/mnt/sdcard/", path.substring(path.lastIndexOf("/") + 1)); // 处理文件传输的处理器 client.get(path, new FileAsyncHttpResponseHandler(file) { @Override public void onSuccess(int statusCode, Header[] headers, File file) { Toast.makeText(getApplicationContext(), "下载成功", Toast.LENGTH_SHORT).show(); } @Override public void onFailure(int statusCode, Header[] headers, Throwable throwable, File file) { Toast.makeText(getApplicationContext(), "下载失败 " + statusCode, Toast.LENGTH_SHORT).show(); throwable.printStackTrace(); } @Override public void onProgress(long bytesWritten, long totalSize) { // 下载或上传的进度 System.out.println(bytesWritten + " / " + totalSize + " (" + bytesWritten * 100 / totalSize + "%)"); } }); }
8.2 多线程断点续传下载器
服务器架构客户端架构
在下载的时候多个线程并发可以占用服务器端更多资源,从而加快下载速度
手机端下载数据时难免会出现无信号断线、电量不足等情况,所以需要断点续传功能
根据下载数据长度计算每个线程下载的数据位置,程序中开启多个线程并发下载
在请求头中设置Range字段就可以获取指定位置的数据,例如:Range: bytes=100-200
在下载过程中记录每个线程已拷贝数据的数量,如果下载中断,下次启动时从记录位置继续下载
8.3 多线程下载
- 进度条使用< Progress>进行配置
默认为圆形进度条,水平进度条需要配置style属性,?android:attr/progressBarStyleHorizontal
使用android.R.attr.progressBarStyleHorizontal作为样式
- 当点击下载按钮时开启多线程下载,下载过程中修改进度条进度
设置最大刻度:setMax()
设置当前进度:setProgress()
8.4 断点续传
断点续传需要在下载过程中记录每条线程的下载进度每次下载开始之前先读取数据库,查询是否有未完成的记录,有就继续下载,没有则创建新记录插入数据库
在每次向文件中写入数据之后,在数据库中更新下载进度
下载完成之后删除数据库中下载记录
8.5 Handler传输数据
主线程中创建的View只能在主线程中修改,其他线程只能通过和主线程通信,在主线程中改变View数据我们使用Handler可以处理这种需求
主线程中创建Handler,重写handleMessage()方法
新线程中使用Handler的sendMessage方法发送消息,主线程即可收到消息,并且执行handleMessage方法
示例源码->百度网盘
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件