Closed jelychow closed 8 years ago
可以通过 filedownloader.properties
配置 process.non-separate
参数,将FileDownloader设置为非独立进程。Refs: https://github.com/lingochamp/FileDownloader/wiki/filedownloader.properties ,这样就会直接运行在主进程(UI进程) 上了。
也可以参看这里的中文说明: 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 |
能否提供一个eclipse用的library 或者jar 我自己手动转成eclipse的library后 FileDownloader.getImpl().create(url).setPath(path).setListener(FileDownloadListener).start();后一点反应也没有 listener回调的接口全部都没有回调 跟没调用download一样
@Pulini 到这里 下载 library-0.2.9.aar
然后用zip工具打开,取其中的 classes.jar
,然后导入试试(应该是没有问题,我们没有资源文件,classes.jar是编译后的class)。
如果导入成功以后可以使用,可能你还需要在你的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有关方式进行关联即可。
非常感谢您能快速的回复我的问题, 我按照你的方法 把classes.jar放到libs里面 并在APPlication里面添加上了service 但是运行的时候报了error Failed resolution of: Lokio/Buffer;
@Pulini 这个估计是引okhttp的依赖的梗,你引了最新版本的okio没有。
@Jacksgong 版本3.0.0 RC1 网上搜的版本,或许你可以给我一个你用的okhttp
楼主人还是不错的,有空配合楼主做一个根据网络状态下载,暂停的补充
@Jacksgong 请问如何在正在下载的FileDownloader中添加新的下载链接 使其并行下载 并实现可单独暂停和开始下载,demo里面并没有类似的代码。
@Pulini 默认单个单个提交任务,就是并行下载,并且支持独立控制暂停和开始,你可以参考下demo中的 任务管理器案例。
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 开始下载 请问这是怎么回事
首先,建立网络连接默认的线程只有三个,如果之前已经有三个正在下载了,再进入队列的会等候(这个线程数在 filedownloader.properties
可以配置),对应的效果可以参考 demo中的任务管理器案例。
其次,你留意下,如果 回调了 started
了说明开始下载了,而 started
到 connected
这两个回调期间的时间是建立链接所消耗的时间。
@Jacksgong FileDownloadListener回调接口并没有started 而且我对比你的接口文档发现demo里有些API 文档上并没有标识,不知是不是我下载的版本并非最新的。
@Pulini 你参看下readme 最新版本是 0.2.9
。
@jelychow 你说的这个根据网络状态其实是偏业务层面,而且外界控制也非常的简单,我比较建议的是上层业务自己实现的。
@Jacksgong 确实是0.2.9解压得到的classes.jar 但是FileDownloadListener回调的接口里并没有看到started这个接口。 从pending到 progress断则4-5秒 长则十几秒。还有一个问题想请教一下,同一个监听下的多个下载任务通过FileDownloader.getImpl().pause(downloadId);进行暂停是开始 但是这个downloadid 是从哪里传进去的 我在demo里面找了好久都没看到,希望博主有空能给demo增加点注解,方便我们这种新手阅读。
@Pulini 有的,只是不是抽象方法,你可以实现可不实现而已。
@Jacksgong 看到了 谢谢,下载线程的ID是在哪里设置的请问
@Pulini 👍
@Pulini 关于配置网络连接(同时下载)线程数,参考这里: 这里filedownloader.properties 中的 download.max-network-thread-count
filedownloader对sdk版本是否有要求;我的minsdk=14,targetsdk=29;新手路过
我个人希望这个library更精简一些,希望能提供一个精简的包,不需要跨进程服务,我不喜欢我的app在被kill后台仍然开着一堆进程,这样并不合适