码迷,mamicode.com
首页 > 其他好文 > 详细

DownloadManager不好用?试试ZlsamDownloadService

时间:2019-05-22 20:48:10      阅读:91      评论:0      收藏:0      [点我收藏+]

标签:component   nts   add   cte   exce   手机   有用   代码   功能   

前一阵子,在给公司的智能电视做下载模块的时候发现,android自带的DownloadManager在有线网的情况下没有反应。看了下源码发现标准的手机版android的DownloaderManager就是没有对有线网的情况作处理,于是花了些时间自己写了个下载模块。考虑到国内大多数的智能电视都是基于手机版android改的,所以这里共享一下。

先发一下源码地址:https://github.com/zhanglong1/ZlsamDownloadService

ZlsamDownloadService是一个可以管理多个下载任务的android服务,你把它作为DownloadManager的备选方案。具体功能如下:

  1. 支持多任务

  2. 线程安全

  3. 支持有线网环境

  4. 可以多app共享使用

  5. 持久化状态,下次启动时可以继续未完成任务

  6. 支持插队,对于紧急任务特别有用

最大等待队列:20;

最大处理队列:3;

最大成功队列:20;

最大失败队列:20。

如果以上参数不能满足你的需求,你可以直接在代码中更改,具体位置在TaskQueueManager。

如何使用

如果你想将代码嵌入到你自己的项目当中,你需要将ZlsamDownloadService项目改为library,并在你的项目中引用。在onStart回调中启动和绑定的代码如下:

Intent intent = new Intent("com.zlsam.download.DOWNLOAD_SERVICE"); 
startService(intent); 
bindService(intent, mConnection, Context.BIND_AUTO_CREATE); 

IMainDownloadingService mDownloadService;
private ServiceConnection mConnection = new ServiceConnection() {
    @Override
    public void onServiceConnected(ComponentName name, IBinder service) {
        mDownloadService  = IMainDownloadingService.Stub.asInterface(service);
        appendLog("Bound to download service.");
    }

    @Override
    public void onServiceDisconnected(ComponentName name) {
        mDownloadService = null;
    }
};

绑定成功之后你可以调用相关方法,这些方法定义在com.zlsam.download.IMainDownloadingService。

下载:


try {
    int result = mDownloadService.add2Queue(url, null, null, false);
    if (result < 0) {
        appendLog("Add task failed, error code: " + result + ", url: " + url);
    } else {
        appendLog("Add task succeed, url: " + url);
    }
} catch (RemoteException e) {
    e.printStackTrace();
}

插队下载:


try {
    int result = mDownloadService.add2Queue(url, null, null, true);
    if (result < 0) {
        appendLog("Add task jump failed, error code: " + result + ", url: " + url);
    } else {
        appendLog("Add task jump succeed, url: " + url);
    }
} catch (RemoteException e) {
    e.printStackTrace();
}

检查任务状态:


try {
    state = mDownloadService.queryState(url);
} catch (RemoteException e) {
    e.printStackTrace();
    appendLog("Check task state: exception, url: " + url);
}
switch (state) {
    case -1:
        appendLog("Check task state: not found, url: " + url);
        break;
    case 0:
        appendLog("Check task state: waiting, url: " + url);
        break;
    case 1:
        appendLog("Check task state: processing, url: " + url);
        break;
    case 2:
        appendLog("Check task state: succeed, url: " + url);
        break;
    case 3:
        appendLog("Check task state: failed, url: " + url);
        break;
}

如果你想清除一个已经结束的(成功或者失败)任务(包括已下载的文件):

try {
    mDownloadService.clearOne(mFinishedTasks.get(mFinishedTasks.size() - 1));
} catch (RemoteException e) {
    e.printStackTrace();
}

离开界面时你要在onStop回调中解绑服务:

unbindService(mConnection);

调试命令

adb logcat ZlsamDownloadService:V *:S

Demo

你可以直接build安装并启动ZlsamDownloaderService,代码中自带的TestActivity就是一个测试Demo。

DownloadManager不好用?试试ZlsamDownloadService

标签:component   nts   add   cte   exce   手机   有用   代码   功能   

原文地址:https://blog.51cto.com/9797337/2398719

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!