Giter VIP home page Giter VIP logo

downloadmanager's Introduction

DownloadManager

Introduce

  • 基于OkHttp实现的下载管理,支持多线程、断点续传等功能,Demo演示用的是RecyclerView,在Application里可设置任务并发等。
  • 实现时基本无别的臃肿代码,可以方便修改使用。

Demo

Download demo apk

Screenshot

Alt text

Use

Gradle

compile 'com.yuan.library.dmanager:downloadmanager-okhttp-release:1.1.8'

Maven

<dependency>
  <groupId>com.yuan.library.dmanager</groupId>
  <artifactId>downloadmanager-okhttp-release</artifactId>
  <version>1.1.8</version>
  <type>pom</type>
</dependency>

Code

// 在Application初始化
DownloadManager.getInstance().init(this, 3);

// 代码中使用
String taskId = String.valueOf(mListData.get(holder.getAdapterPosition()).getUrl().hashCode());
DownloadTask itemTask = mDownloadManager.getTask(taskId);
DownloadManager.getInstance().add(itemTask);

//下载管理具体使用,也需要对列表的adapter进行处理,具体实现请参考demo。

Update

v1.1.8

  • 修复下载地址无效或者地址为空引起的crash。

v1.1.7

  • 修复新下载任务在连接中状态时,点击按钮crash的bug。
  • 添加ConnectException捕获。
  • 更新演示demo。

v1.1.6

  • 修改数据库的存储为GreenDao框架。

v1.1.5

  • 修复暂停后没有更新数据库状态。

v1.1.4

  • 最低兼容版本到14(Android4.0)

v1.1.3

  • 修复有任务正在下载时,取消任务有时候不能中断下载的BUG。在demo中长按某个条目,可取消一个任务。

v1.1.2:

  • 修复多个任务同时等待,暂停某个任务时,等待队列出现错误。
  • 修复Demo按返回键退出程序,再次进入程序,任务还在下载时,UI不刷新问题(以后版本更新,会将下载统一下放到service中)。
  • 优化线程池的处理。

v1.1.1:

  • 添加超时异常的捕获。
  • 可以自定义OkHttpClient,通过DownloadManager.getInstance().init(this, 3,HttpClient)添加。
  • 如果不设置最多下载数量,那么下载数量将根据CPU核数量来分配,并且最大线程数量限制在15个。

v1.1.0:

  • 重构了下载管理,删除冗余代码,并添加任务失败的回调。
  • 修复了已知bug。

Remark

由于demo中下载地址,是在本机上搭的服务器,所以点击下载按钮不能下载。如果demo中的下载测试,请在MainActivity的getMockData方法中换成可用的地址。

Contacts

mail:[email protected]

qq:11026979

downloadmanager's People

Contributors

yuanwenbing avatar

Stargazers

 avatar moyearzhou avatar Farhad avatar Sky avatar poorya.db avatar Stephen Henry avatar Gen Cui avatar  avatar Z-T avatar 薛勇 avatar Karthik Kompelli avatar  avatar Sogrey avatar  avatar NickLi avatar  avatar Forget avatar wentao avatar  avatar  avatar  avatar  avatar  avatar Trung Nguyen avatar Yoh Asakura avatar Jaydip_Meghapara(JD) avatar tengxiangchen avatar  avatar MEDHAT AL KORDI avatar Neil avatar  avatar 圈圈猫 avatar hzb avatar  avatar  avatar Quoi Tran avatar  avatar  avatar  avatar thu avatar MaYunFei avatar Lubin avatar  avatar Xie Winson avatar Papaya avatar  avatar  avatar song avatar tgmerge avatar Davood Jafari avatar MAY3AM avatar  avatar Aftab avatar orzangleli avatar  avatar lacorey avatar f-t-i-o-i avatar  avatar Gassion永刚 avatar Tikou avatar Aritra Roy avatar Pranav Lathigara avatar Po-Hsun Chien avatar Rahul Chowdhury avatar  avatar Rubin Nellikunnathu avatar Xiaohai.lin avatar wp avatar Younes Saadat avatar Mohamed Nabil avatar Henrique Santana de Miranda avatar David Ruiz avatar Paweł Tymczuk avatar  avatar Hideeee avatar Hocine Hamdi avatar Bhargav Pandya avatar Jungle avatar Ojabo John Heart avatar Wade avatar  avatar 千古不见一人闲 avatar

Watchers

James Cloos avatar  avatar Aftab avatar  avatar MaYunFei avatar 千古不见一人闲 avatar  avatar  avatar

downloadmanager's Issues

Crash on Init

Crashes at the very first moment at DownloadManager.getInstance().init(this,3)

English translation

Looks interesting, may you translate comments and project overview to english?

java.lang.NullPointerException: Attempt to invoke interface method 'void

java.lang.NullPointerException: Attempt to invoke interface method 'void com.yuan.library.dmanager.download.DownloadTaskListener.onCancel(com.yuan.library.dmanager.download.DownloadTask)' on a null object reference
at com.yuan.library.dmanager.download.DownloadTask$1.handleMessage(DownloadTask.java:59)

Even the existing DownloadTask happens the above error.

Call Back not giving update

if i start a download and destroy the activity then recreate the activity. like

`DownloadManager.getInstance().getTask(mydownloadfileid).setListener(new DownloadTaskListener() {
            @Override
            public void onQueue(DownloadTask downloadTask) {
                Lod.d(TAG,"onQueue");
            }

            @Override
            public void onConnecting(DownloadTask downloadTask) {
 Lod.d(TAG,"onConnecting");
            }

            @Override
            public void onStart(DownloadTask downloadTask) {
Lod.d(TAG,"onStart");
            }

            @Override
            public void onPause(DownloadTask downloadTask) {
Lod.d(TAG,"onPause");
            }

            @Override
            public void onCancel(DownloadTask downloadTask) {
Lod.d(TAG,"onCancel");
            }

            @Override
            public void onFinish(DownloadTask downloadTask) {
Lod.d(TAG,"onFinish");
            }

            @Override
            public void onError(DownloadTask downloadTask, int code) {
Lod.d(TAG,"onError");
            }
        });;`

then i am not getting any call back.
need Healp

bug: TaskEntity not updated after pause

https://github.com/yuanwenbing/DownloadManager/blob/master/library/src/main/java/com/yuan/library/dmanager/download/DownloadTask.java#L123

according to this, mDownloadDao.update(mTaskEntity); when task paused or canceled never called when paused or cancel a task

i think you must update functions to this :

void pause() {
        mTaskEntity.setTaskStatus(TaskStatus.TASK_STATUS_PAUSE);
        mDownloadDao.update(mTaskEntity);
        handler.sendEmptyMessage(TaskStatus.TASK_STATUS_PAUSE);
    }

    void queue() {
        mTaskEntity.setTaskStatus(TaskStatus.TASK_STATUS_QUEUE);
        mDownloadDao.update(mTaskEntity);
        handler.sendEmptyMessage(TaskStatus.TASK_STATUS_QUEUE);
    }

    void cancel() {
        mTaskEntity.setTaskStatus(TaskStatus.TASK_STATUS_CANCEL);
        mDownloadDao.update(mTaskEntity);
        handler.sendEmptyMessage(TaskStatus.TASK_STATUS_CANCEL);
    }

Cancel task error

When download link Error 404.0 - Not Found, cacel task error:

org.greenrobot.greendao.DaoException: Entity has no key at org.greenrobot.greendao.AbstractDao.getKeyVerified(AbstractDao.java:928) at org.greenrobot.greendao.AbstractDao.delete(AbstractDao.java:625) at org.greenrobot.greendao.AbstractDaoSession.delete(AbstractDaoSession.java:100) at com.yuan.library.dmanager.db.DaoManager.delete(DaoManager.java:52) at com.yuan.library.dmanager.download.DownloadTask.cancel(DownloadTask.java:188) at com.yuan.library.dmanager.download.DownloadManager.cancelTask(DownloadManager.java:175)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.