1.onCreate()方法中注册
2.下载回调方法,去更新进度条,和暂停、失败、下载、开始等状态
注意:自定义按钮状态,随着回调的状态改变自己的状态
此处暂停的回调方法,会在下载中失败了,重新下载;实际应用中此时状态还是应该是等待的状态;
此处刚关闭页面重新进来时,用框架给的状态也是不对的,当你本应是等待状态时,却还是暂停状态了;
所以状态我们需要自己记录,下载进度最好也在本地数据库记录好;
3.项目中同时进行几个不同的下载任务时,获取所有的下载任务会返回全部的所以会乱
List<AbsEntity> temps = Aria.download(this).getTotalTaskList();此时也是最好从自己的本地数据库取数据最好;
4.开始下载
1)获取数据源中的item String url = (String) v.getTag(); int index = getPositionFromUrl(url); if(index != -1){ NaviOfflineDbBean dbBean = datas.get(index); 2)开始下载此item Aria.download(mContext) .load(url) .setFilePath(DownLoadRootPath + File.separator + dbBean.getLoacalPath() + ".std") .start(); 3)改变数据源的状态并刷新 dbBean.setState(STATE_RUNNING_BUTTON); notifyDataSetChanged(); 4)更新数据库状态为正在下载 NaviOfflineDbManager.getInstance().updateDBDownloadStatus(STATE_RUNNING_BUTTON,url,mContext);改变数据源状态,此时需要在给onclickView的View设置tag,设置一个url,从数据源中对比那个position,再改变数据源中的状态,然后再刷新
做此类列表的item刷新必须从数据源更新,其他方式都会混乱
注意:ListView刷新问题
1》数据源改变要找到position 2》数据源 通过set来改变并刷新 datas.set(position,bean); notifyDataSetChanged(); 3》如果View没有及时改变那可以去刷新View 设计中开始下载和暂停下载改变不同的颜色,但是数据源改变了,也刷新了,可是View颜色确实没有改变,所以增加了下面这句话很灵敏了。 holder.pb.postInvalidate();
5.暂停下载
Aria.download(mContext).load(url).stop();6.删除下载任务
Aria.download(mContext).load(url).cancel(true);7.在activity中创建回调方法
@Download.onPre void onPre(DownloadTask task) { LogUtils.i(LogUtils.FROM_XQ, "WRAN_" + TAG + "onPre", task.getTaskName()); downloadAdapter.updateState(task.getEntity()); } @Download.onTaskStart void taskStart(DownloadTask task) { LogUtils.i(LogUtils.FROM_XQ, "WRAN_" + TAG + "taskStart", task.getTaskName()); downloadAdapter.updateState(task.getEntity()); } @Download.onTaskResume void taskResume(DownloadTask task) { if(downloadAdapter != null && task != null) { downloadAdapter.updateState(task.getEntity()); } } @Download.onTaskStop void taskStop(DownloadTask task) { if(downloadAdapter != null && task != null) { downloadAdapter.updateState(task.getEntity()); } } @Download.onTaskCancel void taskCancel(DownloadTask task) { if(downloadAdapter != null && task != null) { downloadAdapter.updateState(task.getEntity()); } } @Download.onTaskFail void taskFail(DownloadTask task) { if(downloadAdapter != null && task != null) { downloadAdapter.updateState(task.getEntity()); } } @Download.onTaskComplete void taskComplete(DownloadTask task) { if(downloadAdapter != null && task != null) { downloadAdapter.updateState(task.getEntity()); } } @Download.onTaskRunning() void taskRunning(DownloadTask task) { if(downloadAdapter != null && task != null) { downloadAdapter.updateState(task.getEntity()); } }7.onDestory()方法中反注册