[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-4085":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":16,"stars7d":17,"stars30d":18,"stars90d":16,"forks30d":16,"starsTrendScore":16,"compositeScore":19,"rankGlobal":10,"rankLanguage":10,"license":20,"archived":21,"fork":21,"defaultBranch":22,"hasWiki":23,"hasPages":21,"topics":24,"createdAt":10,"pushedAt":10,"updatedAt":34,"readmeContent":35,"aiSummary":36,"trendingCount":16,"starSnapshotCount":16,"syncStatus":37,"lastSyncTime":38,"discoverSource":39},4085,"FileDownloader","lingochamp\u002FFileDownloader","lingochamp","Multitask、MultiThread(MultiConnection)、Breakpoint-resume、High-concurrency、Simple to use、Single\u002FNotSingle-process","",null,"Java",11118,2208,310,184,0,1,3,70.8,"Apache License 2.0",false,"master",true,[25,26,27,28,29,30,31,32,33],"android","breakpoint","download","downloader","filedownloader","high-concurrency","multiple-process","multiple-thread","multitasking","2026-06-12 04:00:21","# FileDownloader\nAndroid multi-task file download engine.\n\n\n[![Download][bintray_svg]][bintray_url]\n![][file_downloader_svg]\n[![Build Status][build_status_svg]][build_status_link]\n[![][filedownloader_snapshot_svg]](https:\u002F\u002Foss.sonatype.org\u002Fcontent\u002Frepositories\u002Fsnapshots\u002Fcom\u002Fliulishuo\u002Ffiledownloader\u002F)\n\n> [中文文档](https:\u002F\u002Fgithub.com\u002Flingochamp\u002FFileDownloader\u002Fblob\u002Fmaster\u002FREADME-zh.md)\n\n## FileDownloader2\n\nNow, [FileDownloader2-OkDownload](https:\u002F\u002Fgithub.com\u002Flingochamp\u002Fokdownload) is released, okdownload will contain all advantage on the FileDownloader and beyond.\n\nBecause of FileDownloader unit-test coverage is very low, so all farther features and enhances will be achieved on the okdownload instead of FileDownloader, and FileDownloader will only focuses on bug fixes.\n\n## DEMO\n\n![][single_demo_gif]\n![][chunked_demo_gif]\n![][serial_tasks_demo_gif]\n![][parallel_tasks_demo_gif]\n![][tasks_manager_demo_gif]\n![][hybrid_test_demo_gif]\n![][avoid_drop_frames_1_gif]\n![][avoid_drop_frames_2_gif]\n\n## Installation\n\nFileDownloader is installed by adding the following dependency to your `build.gradle` file:\n\n```groovy\ndependencies {\n    implementation 'com.liulishuo.filedownloader:library:1.7.7'\n}\n```\n\nSnapshots of the development version are available in [Sonatype's `snapshots` repository](https:\u002F\u002Foss.sonatype.org\u002Fcontent\u002Frepositories\u002Fsnapshots\u002F), you can include on your gradle project through:\n\n```groovy\nrepositories {\n    maven { url \"https:\u002F\u002Foss.sonatype.org\u002Fcontent\u002Frepositories\u002Fsnapshots\u002F\" }\n}\n```\n\n## Open customize component\n\nFrom now on, FileDownloader support following components to be customized by yourself:\n\n| Name | Interface | Default Impl\n| --- | --- | ---\n| Connection | [FileDownloadConnection][FileDownloadConnection-java-link] | [FileDownloadUrlConnection][FileDownloadUrlConnection-java-link]\n| OutputStream | [FileDownloadOutputStream][FileDownloadOutputStream-java-link] | [FileDownloadRandomAccessFile][FileDownloadRandomAccessFile-java-link]\n| Database | [FileDownloadDatabase][FileDownloadDatabase-java-link] | [RemitDatabase][RemitDatabase-java-link]\n| ConnectionCountAdapter | [ConnectionCountAdapter][ConnectionCountAdapter-java-link] | [DefaultConnectionCountAdapter][DefaultConnectionCountAdapter-java-link]\n| IdGenerator | [IdGenerator][IdGenerator-java-link] | [DefaultIdGenerator][DefaultIdGenerator-java-link]\n| ForegroundServiceConfig | [ForegroundServiceConfig][ForegroundServiceConfig-java-link] | [ForegroundServiceConfig][ForegroundServiceConfig-java-link]\n\n> - If you want to use okhttp as your connection component, the simplest way is [this repo](https:\u002F\u002Fgithub.com\u002FJacksgong\u002Ffiledownloader-okhttp3-connection).\n> - If you don't want to use any database on FileDownloader(the database on FileDownloader is used for persist tasks' breakpoint info) just using [NoDatabaseImpl.java](https:\u002F\u002Fgithub.com\u002Flingochamp\u002FFileDownloader\u002Fblob\u002Fmaster\u002Flibrary\u002Fsrc\u002Fmain\u002Fjava\u002Fcom\u002Fliulishuo\u002Ffiledownloader\u002Fservices\u002FNoDatabaseImpl.java)\n\n### How to valid it?\n\nJust create your own `DownloadMgrInitialParams.InitCustomMaker` and put those customized component to it, finally init the FileDownloader with it: [FileDownloader#init](https:\u002F\u002Fgithub.com\u002Flingochamp\u002FFileDownloader\u002Fblob\u002Fmaster\u002Flibrary\u002Fsrc\u002Fmain\u002Fjava\u002Fcom\u002Fliulishuo\u002Ffiledownloader\u002FFileDownloader.java#L62)\n\n## Adaptation\n\n### Adapt to Android 8.0\n\nThe restriction of background service has been tightened since Android 8.0, for more details, please refer to [here](https:\u002F\u002Fdeveloper.android.com\u002Fabout\u002Fversions\u002Foreo\u002Fbackground).\nSo, after Android 8.0, the download service will be a foreground service when start downloading during app is in background and you will see a notification with a title named \"FileDownloader\" start from FileDownloader 1.7.6.\nYou can refer to [here](https:\u002F\u002Fgithub.com\u002Flingochamp\u002FFileDownloader\u002Fwiki\u002FCompatibility-of-Android-O-Service) to custom the notification.\n\n### Adapt to Android 9.0\n\nStarting with Android 9.0 (API level 28), cleartext support is disabled by default, you can have a look at [here](https:\u002F\u002Fstackoverflow.com\u002Fquestions\u002F45940861\u002Fandroid-8-cleartext-http-traffic-not-permitted) to know about more details.\nFileDownloader demo has handled this problem start with 1.7.6.\n\nAccording to the [migration notes](https:\u002F\u002Fdeveloper.android.com\u002Fabout\u002Fversions\u002Fpie\u002Fandroid-9.0-migration#tya), the FOREGROUND_SERVICE permission has been added to the library manifest since FileDownloader 1.7.6.\n\n## Welcome PR\n\n> If you can improve the unit test for this project would be great.\n\n- Comments as much as possible.\n- Commit message format follow: [AngularJS's commit message convention](https:\u002F\u002Fgithub.com\u002Fangular\u002Fangular.js\u002Fblob\u002Fmaster\u002FCONTRIBUTING.md#-git-commit-guidelines) .\n- The change of each commit as small as possible.\n\n![][structure-img]\n![][message-system-img]\n\n## Usage\n\nBy default, the FileDownloadService runs on the separate process, if you want to run it on the main process, just configure on the [filedownloader.properties](https:\u002F\u002Fgithub.com\u002Flingochamp\u002FFileDownloader\u002Fwiki\u002Ffiledownloader.properties), and you can use `FileDownloadUtils.isDownloaderProcess(Context)` to check whether the FileDownloadService can run on the current process.\n\nFor more readable, Moved to [Wiki](https:\u002F\u002Fgithub.com\u002Flingochamp\u002FFileDownloader\u002Fwiki).\n\n## LICENSE\n\n```\nCopyright (c) 2015 LingoChamp Inc.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n   http:\u002F\u002Fwww.apache.org\u002Flicenses\u002FLICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n```\n\n[license_2_svg]: https:\u002F\u002Fimg.shields.io\u002Fhexpm\u002Fl\u002Fplug.svg\n[android_platform_svg]: https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FPlatform-Android-brightgreen.svg\n[file_downloader_svg]: https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FAndroid-FileDownloader-orange.svg\n[structure-img]: https:\u002F\u002Fgithub.com\u002Flingochamp\u002FFileDownloader\u002Fraw\u002Fmaster\u002Fart\u002Fstructure.png\n[message-system-img]: https:\u002F\u002Fgithub.com\u002Flingochamp\u002FFileDownloader\u002Fraw\u002Fmaster\u002Fart\u002Fmessage-system.png\n[hybrid_test_demo_gif]: https:\u002F\u002Fgithub.com\u002Flingochamp\u002FFileDownloader\u002Fraw\u002Fmaster\u002Fart\u002Fhybrid_test_demo.gif\n[parallel_tasks_demo_gif]: https:\u002F\u002Fgithub.com\u002Flingochamp\u002FFileDownloader\u002Fraw\u002Fmaster\u002Fart\u002Fparallel_tasks_demo.gif\n[serial_tasks_demo_gif]: https:\u002F\u002Fgithub.com\u002Flingochamp\u002FFileDownloader\u002Fraw\u002Fmaster\u002Fart\u002Fserial_tasks_demo.gif\n[tasks_manager_demo_gif]: https:\u002F\u002Fgithub.com\u002Flingochamp\u002FFileDownloader\u002Fraw\u002Fmaster\u002Fart\u002Ftasks_manager_demo.gif\n[avoid_drop_frames_1_gif]: https:\u002F\u002Fgithub.com\u002Flingochamp\u002FFileDownloader\u002Fraw\u002Fmaster\u002Fart\u002Favoid_drop_frames1.gif\n[avoid_drop_frames_2_gif]: https:\u002F\u002Fgithub.com\u002Flingochamp\u002FFileDownloader\u002Fraw\u002Fmaster\u002Fart\u002Favoid_drop_frames2.gif\n[single_demo_gif]: https:\u002F\u002Fgithub.com\u002Flingochamp\u002FFileDownloader\u002Fraw\u002Fmaster\u002Fart\u002Fsingle_demo.gif\n[chunked_demo_gif]: https:\u002F\u002Fgithub.com\u002Flingochamp\u002FFileDownloader\u002Fraw\u002Fmaster\u002Fart\u002Fchunked_demo.gif\n[bintray_svg]: https:\u002F\u002Fapi.bintray.com\u002Fpackages\u002Fjacksgong\u002Fmaven\u002FFileDownloader\u002Fimages\u002Fdownload.svg\n[bintray_url]: https:\u002F\u002Fbintray.com\u002Fjacksgong\u002Fmaven\u002FFileDownloader\u002F_latestVersion\n[file_download_listener_callback_flow_png]: https:\u002F\u002Fgithub.com\u002Flingochamp\u002FFileDownloader\u002Fraw\u002Fmaster\u002Fart\u002Ffiledownloadlistener_callback_flow.png\n[build_status_svg]: https:\u002F\u002Ftravis-ci.org\u002Flingochamp\u002FFileDownloader.svg?branch=master\n[filedownloader_snapshot_svg]: https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FSnapShot-1.7.8-yellow.svg\n[build_status_link]: https:\u002F\u002Ftravis-ci.org\u002Flingochamp\u002FFileDownloader\n[FileDownloadConnection-java-link]: https:\u002F\u002Fgithub.com\u002Flingochamp\u002FFileDownloader\u002Fblob\u002Fmaster\u002Flibrary\u002Fsrc\u002Fmain\u002Fjava\u002Fcom\u002Fliulishuo\u002Ffiledownloader\u002Fconnection\u002FFileDownloadConnection.java\n[FileDownloadUrlConnection-java-link]: https:\u002F\u002Fgithub.com\u002Flingochamp\u002FFileDownloader\u002Fblob\u002Fmaster\u002Flibrary\u002Fsrc\u002Fmain\u002Fjava\u002Fcom\u002Fliulishuo\u002Ffiledownloader\u002Fconnection\u002FFileDownloadUrlConnection.java\n[FileDownloadDatabase-java-link]: https:\u002F\u002Fgithub.com\u002Flingochamp\u002FFileDownloader\u002Fblob\u002Fmaster\u002Flibrary\u002Fsrc\u002Fmain\u002Fjava\u002Fcom\u002Fliulishuo\u002Ffiledownloader\u002Fdatabase\u002FRemitDatabase.java\n[RemitDatabase-java-link]: https:\u002F\u002Fgithub.com\u002Flingochamp\u002FFileDownloader\u002Fblob\u002Fmaster\u002Flibrary\u002Fsrc\u002Fmain\u002Fjava\u002Fcom\u002Fliulishuo\u002Ffiledownloader\u002Fdatabase\u002FRemitDatabase.java\n[FileDownloadOutputStream-java-link]: https:\u002F\u002Fgithub.com\u002Flingochamp\u002FFileDownloader\u002Fblob\u002Fmaster\u002Flibrary\u002Fsrc\u002Fmain\u002Fjava\u002Fcom\u002Fliulishuo\u002Ffiledownloader\u002Fstream\u002FFileDownloadOutputStream.java\n[FileDownloadRandomAccessFile-java-link]: https:\u002F\u002Fgithub.com\u002Flingochamp\u002FFileDownloader\u002Fblob\u002Fmaster\u002Flibrary\u002Fsrc\u002Fmain\u002Fjava\u002Fcom\u002Fliulishuo\u002Ffiledownloader\u002Fstream\u002FFileDownloadRandomAccessFile.java\n[ConnectionCountAdapter-java-link]: https:\u002F\u002Fgithub.com\u002Flingochamp\u002FFileDownloader\u002Fblob\u002Fmaster\u002Flibrary\u002Fsrc\u002Fmain\u002Fjava\u002Fcom\u002Fliulishuo\u002Ffiledownloader\u002Futil\u002FFileDownloadHelper.java#L100\n[DefaultConnectionCountAdapter-java-link]: https:\u002F\u002Fgithub.com\u002Flingochamp\u002FFileDownloader\u002Fblob\u002Fmaster\u002Flibrary\u002Fsrc\u002Fmain\u002Fjava\u002Fcom\u002Fliulishuo\u002Ffiledownloader\u002Fconnection\u002FDefaultConnectionCountAdapter.java\n[IdGenerator-java-link]: https:\u002F\u002Fgithub.com\u002Flingochamp\u002FFileDownloader\u002Fblob\u002Fmaster\u002Flibrary\u002Fsrc\u002Fmain\u002Fjava\u002Fcom\u002Fliulishuo\u002Ffiledownloader\u002Futil\u002FFileDownloadHelper.java#L55\n[DefaultIdGenerator-java-link]: https:\u002F\u002Fgithub.com\u002Flingochamp\u002FFileDownloader\u002Fblob\u002Fmaster\u002Flibrary\u002Fsrc\u002Fmain\u002Fjava\u002Fcom\u002Fliulishuo\u002Ffiledownloader\u002Fservices\u002FDefaultIdGenerator.java\n[ForegroundServiceConfig-java-link]:https:\u002F\u002Fgithub.com\u002Flingochamp\u002FFileDownloader\u002Fblob\u002Fmaster\u002Flibrary\u002Fsrc\u002Fmain\u002Fjava\u002Fcom\u002Fliulishuo\u002Ffiledownloader\u002Fservices\u002FForegroundServiceConfig.java\n","FileDownloader 是一个用于 Android 平台的多任务文件下载引擎。它支持多线程下载、断点续传以及高并发处理，能够极大提高文件下载效率和稳定性。此外，该项目还提供了简单易用的接口，并且支持单进程\u002F多进程模式运行，用户还可以自定义连接、输出流等组件以满足特定需求。FileDownloader 适用于需要高效稳定地从网络获取大文件的应用场景，如视频或大型软件包的下载。项目采用 Java 开发，遵循 Apache License 2.0 协议。",2,"2026-06-11 02:58:21","top_language"]