Android Service Best Practice 分析

实现的功能:

三个按钮:

  1. 开始下载:显示通知,下载
  2. 暂停下载:显示通知,暂停
  3. 停止下载:显示通知,停止

要在activity不可见时仍然运行——服务
需要用到后台线程,使用服务DownloadService。
将下载的具体方法写在服务中,让主活动bind该服务,就可以调用Service 的public的下载的具体方法。

项目结构

项目结构

主函数主要

  1. 在onServiceConnected 方法中,获取service内部的Binder的实例
  2. 启动/绑定/解绑服务
  3. 在需要的地方调用Binder的public方法
    service中
    listener 根据后台线程运行情况,清空task并显示通知,listener给asyncTask用
    binder中直接实现三个按钮对应的方法(调用asyncTask的方法,并处理一些通知等
    asyncTask(DownloadTask)完成下载,更新下载进度,通知下载结果(自己定义一些结果)(后台任务,进度显示更新,结果通知)其中调用了大量listener的方法


    image.png
image.png

class DownloadBinder extends Binder

  • DownService的内部类
  • 里面提供一些public方法供绑定的activity调用
    • activity 中有一个binder属性
    • 绑定 Service之后,在onServiceConnected 方法中,获取Binder的实例
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    private DownloadService.DownloadBinder downloadBinder;

    private ServiceConnection connection = new ServiceConnection() {
        //这两个方法分别会在活动与服务成功绑定以及活动与服务的连接断开的时候调用
        @Override
        public void onServiceDisconnected(ComponentName name) {
        }
        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            downloadBinder = (DownloadService.DownloadBinder) service;
            //获取到 DownloadBinder的实例, 有了这个实例, 我们就可
            //以在活动中调用服务提供的各种方法了。
        }
    };

你可能感兴趣的:(Android Service Best Practice 分析)