一行代码快速搞定Flowable断点下载(中)

感觉上一篇家常聊了太多,这一篇就直接进入正题,首先来看一下,通过存储化以及方法拓展技术将mComposableDisposable的相关逻辑也从抽象Activity抽离后的代码情况。

abstract class BaseDisposableActivity(override var layout: Int?) : BaseActivity(layout) {constructor() : this(null)
}

没错,代码中disposable的相关逻辑,以及视图绑定的逻辑都已经不见了,也就是说当前的情况,如果我想要在Activity中引入视图绑定到Flowable的逻辑,仅仅只需要在gradle中添加依赖,然后在Application中添加对应的初始化操作就行了。

class CiruyApplication : Application() {companion object {private var instance: CiruyApplication? = nullfun instance() = instance!!}override fun onCreate() {super.onCreate()instance = this//多dex操作MultiDex.install(this)//插件化换肤操作SkinManager.install(this)//disposable强迫症回收操作OnionDisposableManager.install(this)//下载管理器初始化OnionDownloadManager.instance().install(this)}
}

然后我们实现如下的效果,点击下载的时候,开始文件的下载,点击取消的时候,暂停文件的下载,并存储文件的下载进度,再次点击下载时,可以直接从上次的下载进度开始继续下载。

布局文件信息如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><LinearLayoutandroid:layout_width="match_parent"android:orientation="horizontal"android:layout_height="wrap_content"><ProgressBarandroid:id="@+id/main_progress1"style="@style/Widget.AppCompat.ProgressBar.Horizontal"android:layout_width="0dp"android:layout_height="match_parent"android:layout_weight="1"/><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:id="@+id/main_btn_down1"android:text="下载1"/><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:id="@+id/main_btn_cancel1"android:text="取消1"/></LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:orientation="horizontal"android:layout_height="wrap_content"><ProgressBarandroid:id="@+id/main_progress2"style="@style/Widget.AppCompat.ProgressBar.Horizontal"android:layout_width="0dp"android:layout_height="match_parent"android:layout_weight="1"/><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:id="@+id/main_btn_down2"android:text="下载2"/><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:id="@+id/main_btn_cancel2"android:text="取消2"/></LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:orientation="horizontal"android:layout_height="wrap_content"><ProgressBarandroid:id="@+id/main_progress3"style="@style/Widget.AppCompat.ProgressBar.Horizontal"android:layout_width="0dp"android:layout_height="match_parent"android:layout_weight="1"/><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:id="@+id/main_btn_down3"android:text="下载3"/><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:id="@+id/main_btn_cancel3"android:text="取消3"/></LinearLayout>
</LinearLayout>

activity相关代码如下,使用的时候,只需要关心业务相关逻辑即可,什么Disposable的回收,什么断点下载的实现细节,都和使用者完全没有关系。main_btn_down1通过需要下载的URL直接绑定到对应的Flowable从而在IO线程中进行下载的任务,而main_btn_cancel1也直接通过URL与暂停下载逻辑进行解绑。

class DownloadDemoActivity : BasePermissionActivity(R.layout.ac_download_demo) {override fun initListeners() {main_btn_down1.download(Constant.THUNDER_DOWNLOAD_FULL_URL) {main_progress1.max = it.total.toInt()main_progress1.progress = it.progress.toInt()}main_btn_cancel1.cancelDownload(Constant.THUNDER_DOWNLOAD_FULL_URL)}override fun staticPermission() = listOf(Manifest.permission.INTERNET)
}

好的,我们已经将使用讲清楚了,下一篇具体讲讲实现。

一行代码快速搞定Flowable断点下载(中)相关推荐

  1. 一行代码快速搞定Flowable断点下载(下)

    一行代码快速搞定Flowable断点下载(下) 其实这个主题对应的三篇文章真的真的非常难写,首先是感觉非常多人对于函数式编程不太熟悉,然后又有一些人对于kotlin不太熟悉.这就导致了,写这三篇文章的 ...

  2. 一行代码快速搞定Flowable断点下载(上)

    一行代码快速搞定Flowable断点下载(上) 之前我们大致讲了讲,到底怎么完全将disposable相关代码完全隐藏. 然后到了这里,可能有些杠精就会说了,你那个方式,我们不是完全不能拿到Flowa ...

  3. android 圆形图片设置蒙层,Android引导蒙层,安卓新手引导图,引导图层,支持椭圆,圆形,矩形多种形状,一行代码快速搞定-Go语言中文社区...

    新手引导视图,初次打开页面时显示. 支持圆形,椭圆,矩形等多种图形 提示部分支持图片和文字提示 先看效果图 使用步骤. 使用起来特别简单,只需要把GuideView这个类复制到你的项目中就可以了 pa ...

  4. Android引导蒙层,安卓新手引导图,引导图层,支持椭圆,圆形,矩形多种形状,一行代码快速搞定

    新手引导视图,初次打开页面时显示. 支持圆形,椭圆,矩形等多种图形 提示部分支持图片和文字提示 github源码地址:https://github.com/qiushi123/GuideView-ma ...

  5. [JavaScript]只需一行代码,轻松搞定快捷留言-V2升级版

    前天熬了大半宿发了一篇[一行代码轻松搞定快捷留言功能],同时发布了V1.0beta版的快捷留言功能和源代码,之所以是beta版,就是当时感觉虽然基本功能有了,但是还不够完善,特性也不一定合理,今天不知 ...

  6. 极度丝滑!CentOS/Unbuntu系统下快速设置虚拟内存,一行命令快速搞定!!!

    CentOS/Unbuntu系统下快速设置虚拟内存,一行命令搞定 快速开始 #请cd到你机器的执行命令的路径下 cd /usr/local/bin #wget脚本 wget https://gitee ...

  7. 重磅!百度飞桨开源语音基础模型库|中英文语音识别、语音翻译、语音合成、声音分类通通一行代码轻松搞定...

    导读 要说生活里最常见的AI应用场景,语音合成与识别当属大家最为耳熟能详的场景之一了. 寻常到平时地图导航的播报.微信语音转文字.手机语音输入,以及小度智能音箱,都离不开语音技术的加持. 语音技术到底 ...

  8. 一行代码轻松搞定各种IE兼容问题,IE6,IE7,IE8,IE9,IE10

    在网站开发中不免因为各种兼容问题苦恼,针对兼容问题,其实IE给出了解决方案Google也给出了解决方案百度也应用了这种方案去解决IE的兼容问题? 百度源代码如下: <!Doctype html& ...

  9. 一行代码,搞定浏览器数据库 IndexedDB

    作者 | 星尘starx 来源 | https://juejin.cn/post/6918705632757415950 前言 2021 年,如果你的前端应用,需要在浏览器上保存数据,有三个主流方案可 ...

最新文章

  1. 小公司要不要做KPI
  2. Flink 靠什么征服饿了么工程师?
  3. C语言课程学籍管理课程书面报告,C语言学籍管理系统课程设计报告书
  4. Linux删除所有文件(作死命令,危险命令)
  5. 多线程-AbstractQueuedSynchronizer(AQS)
  6. Linux数据链路层的包解析
  7. 2021最新阿里代码规范(前端篇)
  8. 华为USG6000基本内容总结
  9. Lae程序员小漫画(1),仅供一乐
  10. 教育行业网络安全等级保护法律法规参考
  11. 生产系统规划仿真软件
  12. GYM 2015 ACM Syrian Collegiate Programming Contest
  13. 什么是数据仓库的主题
  14. 柳传志内部邮件曝光:联想筹备1年等待大反攻
  15. ModuleNotFoundError: No module named ‘xxx‘; ‘xxx‘ is not a package解决
  16. 《学习笔记56》—— python爬虫显示乱码 b‘\x1f\x8b\x08\x00\x00\x00\x00\x00\...‘
  17. C++的sort函数对于vector排序
  18. OCJP题库1Z0-851(21/30)
  19. nagios报警信息,发送到微信端
  20. 绿盟科技c语言笔试,绿盟科技全国统一笔试题

热门文章

  1. Maven项目提示:源值1.5已经过时,将在未来发行版中删除
  2. Selenium3自动化测试——8.定位一组元素
  3. 线程并发与进程并发各有什么you_操作系统问答题总结
  4. win32应用程序_不是有效的win32应用程序怎么解决
  5. 两张照片重叠处半透明_美人计 | 林允儿的发型可真好看!拿着照片去找发型师吧...
  6. decorator java_装饰器模式-Decorator(Java实现)
  7. java char 指针数组_双指针之对撞指针,Java
  8. java关闭ie提示_java 关闭IE
  9. git 创建新分支,合并分支等问题
  10. Zookeeper一致性级别分析,终于彻底把握了