服务的最佳实践 项目笔记

上面我们学习的Service服务的基本使用,接下来通过一个具体的下载实例来强化service的使用过程。

1. 新建一个DownloadListener接口
此接口提供了5个方法,用来规范一个网络下载任务常用的5个方法。

public interface DownloadListener {//定义5个方法void onProgress(int progress);void onSuccessed();void onFiled();void onPaused();void onCanceled();
}

注意:没有onStart()方法,应为这个方法会在默认调用线程时开始下载。这个接口将作为参数传递,提供给调用者使用,返回下载结果的。

2. 新建DownloadTask类,继承AsyncTask<String, Integer, Integer>类
此类使用异步的方式,来实现下载功能。默认覆写三个方法,此外,提供两个公共方法给外部调用。

public class DownloadTask extends AsyncTask<String, Integer, Integer> {private DownloadListener mDownloadListener;public DownloadTask(DownloadListener listener) {mDownloadListener = listener;}@Overrideprotected Integer doInBackground(String... strings) {return null;}@Overrideprotected void onProgressUpdate(Integer... values) {super.onProgressUpdate(values);}@Overrideprotected void onPostExecute(Integer integer) {super.onPostExecute(integer);}//此外,提供两个公共方法,对外使用//暂停和取消方法public void onPaused() {}public void onCanceled() {}
}

3. 在Activity中使用startService()方法和bindService()来执行Service
这里注意,使用connection里面获取到前面的DownloadBinder实例,然后直接使用Service提供给Binder内部类方法来控制下载状态。

public class Main2Activity extends AppCompatActivity {private DownloadService.DownloadBinder mBinder;private ServiceConnection mServiceConnection = new ServiceConnection() {@Overridepublic void onServiceConnected(ComponentName componentName, IBinder iBinder) {mBinder = (DownloadService.DownloadBinder) iBinder;}@Overridepublic void onServiceDisconnected(ComponentName componentName) {}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main2);//分别使用startService和bindService方法,因为,防止被后台停止//调用mBinder的方法来启动和暂停和取消String url = "";  //下载地址mBinder.startDownload(url);mBinder.pauseDownload();mBinder.cancelDownload();}
}

ok,以上为使用Service下载的文件实例的一个思路,本文认为,把这个流程和设计思路掌握本掌握代码本身更重要,更有参考价值。此下载项目的设计模式值得参考,包括使用接口来传递,提供给调用者更多的方法。使用内部类的方式来定义Binder方法。这个方式公开个调用者,让调用者直接调用自己的内部类,这个思路也挺好的。

《Android 第一行代码》十一章 “服务的最佳实践”相关推荐

  1. 第一行代码十一章:(基于位置的服务) 3C-58-C2-5D-F8-FE

    基于位置的服务 1.申请API 2.使用百度定位 3.在手机上出现自己的位置 1.申请API 在做位置服务时需要申请属于自己的API,所以必须要先成为一个百度开发者,注册的网址如下:hppt//:de ...

  2. Android第一行代码学习思考笔记(碎片、广播、持久化技术和Android数据库)

    Android第一行代码学习思考笔记(碎片.广播.持久化技术和Android数据库 第四章 手机平板要兼顾--探究碎片 4.1碎片是什么(Fragment) 4.2碎片的使用方式 4.2.1碎片的简单 ...

  3. Android第一行代码-Activity

    文章目录 Android第一行代码 Activity 1.Activity基本用法 2.创建和加载布局 加载布局(在Activity中加载布局) 在AndroidManifest文件中注册(所有的ac ...

  4. Android build.gradle文件详解(转述自《Android第一行代码》第二版)

    Android build.gradle文件详解 1. 最外层目录下的build.gradle文件 1.1 repostories 1.2 dependencies 2. app目录下的build.g ...

  5. Android第一行代码(第一行代码、活动)

    一.第一行代码 1.了解全貌 1.1Android的系统架构 Android的系统架构:Linux内核层.系统运行库层.应用框架层和应用层 1.Linux内核层 Android系统是基于Linux内核 ...

  6. Handler内存泄漏问题解决方案(Android,第一行代码,This Handler class should be static or leaks might occur)

    1 问题背景 博主最近在复习<第一行代码>的第10.2.2章节--在子线程中更新UI,书中给出的在UI主线程中用匿名内部类实现Handler的写法如下: private Handler h ...

  7. 《Android 第一行代码》十一章 Service学习笔记

    Android中Service学习笔记 Service的基本使用方法 Service的启动方式有两种,第一种是使用startService()和stopService()方法来启动和停止Service ...

  8. Android第一行代码——第三章:控件的使用方法5A-00-1A-C4-8C-55(2009+jjy)

    标题:这章主要学习如何控件的使用方法 1 TextView. 创建activity_main.xml中的代码 代码如下: <?xml version="1.0" encodi ...

  9. Android第一行代码第二版简要总结

    进入安卓的第一本书(简要概括) 第一章 了解大体Android 1.Android系统架构 Linux内核层:为Android设备的各种硬件提供了底层的驱动. 系统运行库层:通过c/c++库来提供主要 ...

最新文章

  1. LeetCode刷题记录13——705. Design HashSet(easy)
  2. 解决ms_cannot_allocmem错误的两种方法
  3. PHP文本处理 中文汉字字符串 转换为数组
  4. POJ 3855 计算几何·多边形重心
  5. tensorflow就该这么学--6(多层神经网络)
  6. DL之NIN:Network in Network算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略
  7. RTP/RTCP协议介绍
  8. Java-数据结构与算法-二分查找法
  9. git clone 报错 Clone failed: Authentication failed for
  10. cdh 安装_使用Cloudera的CDH部署Hadoop:第二步,安装JDK
  11. nsa php版本,mnsa网络
  12. 如何把Web Service 说清楚
  13. 文件不能超过200k_为什么答题时上传的文件大小不允许
  14. 海康、大华等安防摄像头、NVR、平台通过GB28181接入LieGBS国标流媒体服务
  15. Trajectory Planning (1)——五次、七次多项式
  16. 【100%通过率】华为OD机试真题 Java 实现【完美走位】【2022.11 Q4新题】
  17. eDRX中的Paging PH PTW PF PO时刻计算
  18. [C]sprintf用法
  19. 【云原生】设备云之FlexManager边缘计算[Javascript]
  20. 东华大学计算机年薪,东华大学毕业生薪酬高吗?东华大学什么专业工资高 毕业生就业率...

热门文章

  1. Python:如何从字符串中提取字母或数字?
  2. 凌恩生物资讯|细菌完成图,坑多专家少——请收下这份避坑指南
  3. iSteadi:手机中的斯坦尼康,让你拍出的视频不再抖
  4. java 把jsp 保存成图片_将jsp页面转化为图片或pdf(一)(qq:1324981084)
  5. Vue——简易图书管理系统(三)
  6. 如何入门微信小程序开发
  7. 8皇后问题-递归-回溯(Java)
  8. PaloAlto旁挂部署
  9. Valgrind 检测linux上c++内存泄露(转)
  10. springboot项目如何配置多数据源