Android多任务⽂件断点下载和上传(⾼仿VIVO应⽤市场)直接拿
去⽤
笔者是⾯霸,⾯试200+场      当过考官:⾯过别⼈300+场    去过500强,也呆过初创公司。
关注我就能达到⼤师级⽔平,这话我终于敢说了, 年薪60万不是梦!
斩获腾讯、华为、字节跳动,蚂蚁⾦服,oppo,VIVO,安卓岗offer!我有⼀套速通⼤⼚技巧分享给你!
最近在做云备份功能。包含上传和下载。⽹上的下载框架写点太复杂了,太⽼了。⼜不好⽤,⾃⼰封装了⼀套。⽀持上传和下载功能!3个类搞定。并且实现架构功能,通过泛型封装!完全解耦,直接可以拿去⽤,特别简单
编写流程:安卓下载
1.任务管理器DownLoadManager
2.下载器DownLoadTask()
3.和⽹络交互:DownLoadEngine() 维护状态的关键
⼀、什么是多任务下载框架
多任务框架就是指,同⼀时间内,⽀持多个资源下载。⽀持下载队列、进度更新、下载取消暂停等。
包括:⽹络下载请求,下载任务执⾏、下载任务调度、UI进度更新、任务状态变化、⽂件的存储。
*⽀持多任务下载
*⽀持多线程断点下载
*⽀持进度更新|暂停|取消|恢复
*⽀持在任意界⾯监听下载进度
*⽀持后台下载,notification更新
*⽹络切换智能判断
*下载队列优先级
⼆:实现的点
断点续传 range    206  软件:HttpRequester    先请求⽂件⼤⼩,是否⽀持断点下载    拼接的时候不要错了,多了或者少了,看看字节数观察者模式:进度
线程池:Executor
队列:Queue    LinkBlockQueue
/**
* Description: 下载管理
*
* @Author:* Date: 2021/4/27 16:13
**/
public class DownLoadManagerextends BaseTransferManager {
private static final StringTAG ="DownLoadManager";
private static volatile DownLoadManagerinstance;
private DownLoadManager() {
}
//下载任务
private LinkedBlockingDequeloadTasks =new LinkedBlockingDeque<>();    public LinkedBlockingDequegetAllTasks() {
return loadTasks;
}
/***
* 添加批量任务
*/
public void addTaskList(List transferItemModels) {
if (transferItemModels !=null && !transferItemModels.isEmpty()) {
for (TransferItemModel transferItemModel : transferItemModels) { addTaskModel(transferItemModel);
}
}
}
private void addTaskModel(TransferItemModel transferItemModel) { addTask(new DownLoadTask(transferItemModel));
}
/**************************************************************************/
@Override
public void updateTask() {
//        BaseTransferLoadTask task = WaitTask(loadTasks);
//        if (task != null) {
//            startTask(task);
//        }
}
@Override
public void addTask(DownLoadTask task) {
if (!needRepeatTask && !ains(task) ||needRepeatTask) {
loadTasks.add(task);
startTask(task);
}
}
@Override
public void deleteTask(DownLoadTask task) {
//        if (task == null) {
//            return;
/
/        }
//        task.deleteTask();
//        //从队列中移除
//        BaseTransferLoadTask taskCache = TaskByTask(loadTasks, task); //        if (LoadUtil.isSameTask(task, taskCache)) {
//            ve(task);
//        }
}
@Override
public void pauseAllTask() {
for (BaseTransferLoadTask task :loadTasks) {
if (task ==null) {
continue;
}
task.pauseTask();
}
}
@Override
public void startAllTask() {
for (BaseTransferLoadTask task :loadTasks) {
if (task ==null) {
continue;
}
if (Model().getTranferStatus() == LoadStatus.STATE_PAUSE || Model().getTranferStatus() == LoadStatus.STATE_WAIT) {//暂停,等待
task.startTask();
}
}
}
public static DownLoadManagergetInstance() {
if (instance ==null) {
synchronized (TAG) {
if (instance ==null) {
instance =new DownLoadManager();
}
}
}
return instance;
}
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。