lingochamp / FileDownloader

Multitask、MultiThread(MultiConnection)、Breakpoint-resume、High-concurrency、Simple to use、Single/NotSingle-process
Apache License 2.0
11.04k stars 2.2k forks source link

关于使用的建议 #141

Closed jelychow closed 8 years ago

jelychow commented 8 years ago

我个人希望这个library更精简一些,希望能提供一个精简的包,不需要跨进程服务,我不喜欢我的app在被kill后台仍然开着一堆进程,这样并不合适

Jacksgong commented 8 years ago

可以通过 filedownloader.properties 配置 process.non-separate 参数,将FileDownloader设置为非独立进程。Refs: https://github.com/lingochamp/FileDownloader/wiki/filedownloader.properties ,这样就会直接运行在主进程(UI进程) 上了。

Jacksgong commented 8 years ago

也可以参看这里的中文说明: https://github.com/lingochamp/FileDownloader/blob/master/README-zh.md#filedownloaderproperties

filedownloader.properties

如果你需要定制化FileDownloader,可以在你的项目模块的assets 目录下添加 'filedownloader.properties' 文件(如 /demo/src/main/assets/filedownloader.properties),然后添加以下可选相关配置。

格式: keyword=value

关键字 描述 默认值
http.lenient 如果你遇到了: 'can't know the size of the download file, and its Transfer-Encoding is not Chunked either', 但是你想要忽略类似的返回头不规范的错误,直接将该关键字参数设置为true即可,我们将会将其作为chunck进行处理 false
process.non-separate FileDownloadService 默认是运行在独立进程':filedownloader'上的, 如果你想要FileDownloadService共享并运行在主进程上, 将该关键字参数设置为true,可以有效减少IPC产生的I/O false
download.min-progress-step 最小缓冲大小,用于判定是否是时候将缓冲区中进度同步到数据库,以及是否是时候要确保下缓存区的数据都已经写文件。值越小,更新会越频繁,下载速度会越慢,但是应对进程被无法预料的情况杀死时会更加安全 65536
download.min-progress-time 最小缓冲时间,用于判定是否是时候将缓冲区中进度同步到数据库,以及是否是时候要确保下缓存区的数据都已经写文件。值越小,更新会越频繁,下载速度会越慢,但是应对进程被无法预料的情况杀死时会更加安全 2000
download.max-network-thread-count 用于同时下载的最大网络线程数, 区间[1, 12] 3
Pulini commented 8 years ago

能否提供一个eclipse用的library 或者jar 我自己手动转成eclipse的library后 FileDownloader.getImpl().create(url).setPath(path).setListener(FileDownloadListener).start();后一点反应也没有 listener回调的接口全部都没有回调 跟没调用download一样

Jacksgong commented 8 years ago

@Pulini 到这里 下载 library-0.2.9.aar

然后用zip工具打开,取其中的 classes.jar ,然后导入试试(应该是没有问题,我们没有资源文件,classes.jar是编译后的class)。

image


如果导入成功以后可以使用,可能你还需要在你的AndoridManifest中申明下服务:

...
<application>
   ...
    <service android:name="com.liulishuo.filedownloader.services.FileDownloadService$SharedMainProcessService" />
    <service
        android:name="com.liulishuo.filedownloader.services.FileDownloadService$SeparateProcessService"
        android:process=":filedownloader" />
   ...
</application>
...

可能还要手动引下: okio (#82)。

P.S: 成功以后,应该就可以使用了,如果你想将class关联源码方便使用,你再下载上面地址里面的library-0.2.9-sources.jar 然后再通过IDE有关方式进行关联即可。

Pulini commented 8 years ago

非常感谢您能快速的回复我的问题, 我按照你的方法 把classes.jar放到libs里面 并在APPlication里面添加上了service 但是运行的时候报了error Failed resolution of: Lokio/Buffer;

Jacksgong commented 8 years ago

@Pulini 这个估计是引okhttp的依赖的梗,你引了最新版本的okio没有。

Pulini commented 8 years ago

@Jacksgong 版本3.0.0 RC1 网上搜的版本,或许你可以给我一个你用的okhttp

jelychow commented 8 years ago

楼主人还是不错的,有空配合楼主做一个根据网络状态下载,暂停的补充

Pulini commented 8 years ago

@Jacksgong 请问如何在正在下载的FileDownloader中添加新的下载链接 使其并行下载 并实现可单独暂停和开始下载,demo里面并没有类似的代码。

Jacksgong commented 8 years ago

@Pulini 默认单个单个提交任务,就是并行下载,并且支持独立控制暂停和开始,你可以参考下demo中的 任务管理器案例。

Pulini commented 8 years ago

public class downloda{ ... public void down(String url){ FileDownloader.getImpl() .create(url) .setPath(savepath) .setTag(appinfo.getId()) .setCallbackProgressTimes(100) .setListener(taskDownloadListener) .start(); } } 我在其他类里面调用这个down方法 添加的下载是自动并行下载 但是每次点击后FileDownloadListener返回pending 过了十几秒才返回connected 开始下载 请问这是怎么回事

Jacksgong commented 8 years ago

首先,建立网络连接默认的线程只有三个,如果之前已经有三个正在下载了,再进入队列的会等候(这个线程数在 filedownloader.properties 可以配置),对应的效果可以参考 demo中的任务管理器案例。

其次,你留意下,如果 回调了 started 了说明开始下载了,而 startedconnected 这两个回调期间的时间是建立链接所消耗的时间。

Pulini commented 8 years ago

@Jacksgong FileDownloadListener回调接口并没有started 而且我对比你的接口文档发现demo里有些API 文档上并没有标识,不知是不是我下载的版本并非最新的。

Jacksgong commented 8 years ago

@Pulini 你参看下readme 最新版本是 0.2.9

Jacksgong commented 8 years ago

@jelychow 你说的这个根据网络状态其实是偏业务层面,而且外界控制也非常的简单,我比较建议的是上层业务自己实现的。

Pulini commented 8 years ago

@Jacksgong 确实是0.2.9解压得到的classes.jar 但是FileDownloadListener回调的接口里并没有看到started这个接口。 从pending到 progress断则4-5秒 长则十几秒。还有一个问题想请教一下,同一个监听下的多个下载任务通过FileDownloader.getImpl().pause(downloadId);进行暂停是开始 但是这个downloadid 是从哪里传进去的 我在demo里面找了好久都没看到,希望博主有空能给demo增加点注解,方便我们这种新手阅读。

Jacksgong commented 8 years ago

@Pulini 有的,只是不是抽象方法,你可以实现可不实现而已。

image

Pulini commented 8 years ago

@Jacksgong 看到了 谢谢,下载线程的ID是在哪里设置的请问

Jacksgong commented 8 years ago

@Pulini 👍

Jacksgong commented 8 years ago

@Pulini 关于配置网络连接(同时下载)线程数,参考这里: 这里filedownloader.properties 中的 download.max-network-thread-count

wushangshikongyonghengdazizai commented 4 years ago

filedownloader对sdk版本是否有要求;我的minsdk=14,targetsdk=29;新手路过