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()方法中反注册