当前课程知识点:Android应用开发基础 > 第六章 Android服务 > 6.4 多线程 > 6.4.5 实践案例-下载精灵
本节我们通过一个实例来介绍
使用自定义的服务与AsyncTask一起实现下载功能
本节介绍ServiceBinderAsynTask下载
点击开始下载任务再点击开始按钮,下载开始
点击暂停按钮下载暂停 点击停止按钮下载停止
右键依次选择New/Java Class
设置类名为“EventData”
新建整型iTye
新建整型iProgress
重写getiType方法
返回iType的值
重写setiType方法
传入iType
重写getiProgress方法
返回iProgress的值
重写setiProgress方法
下面介绍下载任务类的实现流程
传入iProgress的值
新建一个类 右键依次选择New/Java Class
设置类名为“DownloadTask”
继承AsyncTask类
启动任务执行的输入参数类型为String
后台任务执行的进度类型为Integer
后台计算结果的类型为Integer
重写doInBackground方法
新建一个私有静态常量TYPE_SUCCESS为0
新建一个私有静态常量TYPE_FAILED为1
新建一个全局静态常量TYPE_PAUSE为2
新建一个全局静态常量TYPE_CANCELED为3
新建一个全局静态常量TYPE_DATA为4
新建一个私有布尔值isCanceled为false
新建一个私有布尔值isPaused为false
新建一个私有整型值lastProgress
新建一个私有整型值iPercent为0
重写DownloadTask方法
使用try方法 当值为true时
如果值为isCanceled则返回TYPE_CANCELED
如果值为isPaused 则继续
定义一个整型值iDownLoadPerent
并初始化为getDownloadProgress方法
重写getDownloadProgress方法
在getDownloadProgress方法中iPercent递增
返回iPercent
向publishProgress方法传入iDownLoadPercent
如果iDownLoadPercent的值大于等于100
使用break方法跳出循环
使用sleep方法使用线程休眠5秒
使用catch方法捕获异常
并返回TYPE_FAILE
否则 返回TYPE_SUCCESS
重写onProgressUpdate方法
定义一个整型变量progress
并复制publishProgress返回值
如果progress大于lastProgress
调用sendEventData方法
重写sendEventData方法
传入iType和iProgress
定义EventData类并初始化
调用setiType方法传入iType
调用setiProgress方法传入iProgress
调用EventBus类的getDefault方法中的post方法
传入mEventData
给sendEventData方法
传入TYPE_DATA,progress
值赋值progress
重写onPostExecute方法
调用sendEventData方法
传入doInBackground返回值,0
重写startDownload方法
赋值isPaused为false
赋值isCanceled为false
重写pauseDownload方法
赋值isPaused为true
重写cancelDownload方法
赋值isCanceled为true
重写onCancelled方法
传入integer
EventBus报错在gradle内加入
implementation 'org.greenrobot:eventbus:3.1.1'
下面介绍下载绑定类的实现流程
新建一个类
依次选择New/Java Class
类名为“DownloadBinder”
继承Binder类
新建一个私有的Context类mCtx
定义DownloadTask类
重写DownloadBinder方法
传入mCtx的值
重写startDownload方法
如果mDownloadTask为空
初始化mDownloadTask为DownloadTask方法
使用execute方法启动并传入url
新建一个Toast实例显示通知下载中
并用show方法显示出来
如果不为空
调用startDownload方法
再新建一个Toast实例显示通知继续下载
重写cancelDownload方法
如果mDownloadTask不为空
则调用cancelDownload方法
否则新建一个Toast实例显示Canceled
然后将mDownloadTask赋值为空
重写puaseDownload方法
如果mDownloadTask不为空
调用pauseDownload方法
下面介绍下载服务类的实现流程
新建一个类依次选择New/Java Class
设置类名为DownloadService
继承Service类
重写onBind方法
新建一个私有的Context类mCtx
定义DownloadBinder类并初始化
重写onCreate方法
重写onStartCommand方法
重写onDestory方法
删除错误代码
返回mDownloadBinder
下面介绍下载主视图的实现流程
进入MainActivity
设置当点击开始下载任务按钮时
新建一个启动DownloadService的意图intent
使用bindService启动意图
定义ServiceConnection类
定义DownloadBinder类
将意图绑定到mServiceConnection接口
设置BIND_AUTO_CREATE
当点击开始按钮时调用startDownload方法
当点击暂停按钮时调用puaseDownload方法
当点击取消按钮时调用cancelDwonload方法
重写onDestory方法
调用EventBus框架的
getDefault方法中
unregister方法解除注册
重写initData方法
调用EventBus框架的
getDefault方法中
register方法进行注册
register方法进行注册
初始化ServiceConnection
在onServiceConnected方法中
初始化DownloadBinder
进入AnderoidManifest文件
注册DownloadService服务
进入MainActivity
注入@Subscribe
重写onEventMainThread方法
如果EventData不为空
返回空
使用switch方法
将EventBus改为EventData
eventbus改为event
调用getiType方法获取iType的值
值为0时
设置TextView为下载完成
100%
break跳出
值为1时
设置textView为下载失败
break跳出
值为2时
设置textView为下载暂停
break跳出
值为3时
设置textView为下载取消
break跳出
值为4时
设置textView为下载进度
使用setProgress方法设置进度框进度
程序编写完成运行程序
首先点击开始下载任务 再点击开始按钮 下载开始
点击暂停按钮 下载暂停 点击停止按钮 下载停止
这就是使用自定义服务和AsyncTask一起实现下载功能的全部内容
请大家按照讲课的内容
实现下载精灵的实例
在Android的手机和模拟器中分别运行
通过实例理解使用AsyncTask多线程
与自定义服务
-Android Studio4.1.2安装常用问题汇总2021.3.15
-1.1 Android概述
--1.1 Android Studio安装与配置-实践案例
-1.1 Android概述--作业
-1.2 Android程序
-1.2 Android程序--作业
-1.3 Android程序调试
-1.3 Android程序调试--作业
-2.1 Activity概述
-2.1 Activity概述--作业
-2.2 Activity应用
-第2章 Android视图--2.2 Activity应用
-3.1 Activity布局
-3.1 Activity布局--作业
-3.2 Android基础组件
-3.2 Android基础组件--作业
-3.3 Android中级组件
-3.3 Android中级组件--作业
-3.4 Android适配器
-3.4 Android适配器--作业
-4.1 Fragment碎片组件
-4.1 Fragment碎片组件--作业
-4.2 ViewPager翻页类组件
-4.2 ViewPager翻页类组件--作业
-讨论:fragment与activity的生命周期有哪些不同?
-5.1 Android广播概述
-5.1 Android广播概述--作业
-5.2 Android广播工作原理
-5.2 Android广播工作原理--作业
-5.3 自定义广播
-第5章 广播--5.3 自定义广播
-5.4 有序广播
--5.4有序广播
-第5章 广播--5.4 有序广播
-6.1 系统服务概述
-6.1 系统服务概述--作业
-6.2 访问系统服务
-6.2 访问系统服务--作业
-6.3 自定义服务
-第6章 Android服务--6.3 自定义服务
-6.4 多线程
--6.4 多线程
-第6章 Android服务--6.4 多线程
-7.1 Android运行权限
-7.1 Android运行权限--作业
-7.2 URL URI概述
-第7章 内容提供者ContentProvider--7.2 URL URI概述
-7.3 ContentProvider概述
-第7章 内容提供者ContentProvider--7.3 ContentProvider概述
-7.4 访问通讯录
-第7章 内容提供者ContentProvider--7.4 访问通讯录
-7.5 课后作业案例
-8.1 相机服务
--8.1 相机服务
-8.1 相机服务--作业
-8.2 音视频服务
-8.2 音视频服务--作业
-9.1 网络服务概述
-9.1 网络服务概述--作业
-9.2 网络框架
--9.2 网络框架
-9.2 网络框架--作业
-9.3 Json
--9.3 Json
-第9章 网络技术--9.3 Json
-9.4 Volley
-第9章 网络技术--9.4 Volley
-10.1 文件存储
--10.1.3 实践案例-SharedPreference文件读写
-10.1 文件存储--作业
-10.2 数据库存储
-10.2 数据库存储--作业
-第1章 实训简介以及开发环境配置
-第2章 在线音乐播放器整体设计以及服务端开发
-第3章 在线音乐播放器-客户端开发
-第4章 在线音乐播放器-完整版
-第5章 QQ聊天项目
-第6章 在线点餐系统