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

服务的最佳实践 项目笔记

上面我们学习的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;
    }

    @Override
    protected Integer doInBackground(String... strings) {
        return null;
    }

    @Override
    protected void onProgressUpdate(Integer... values) {
        super.onProgressUpdate(values);
    }

    @Override
    protected 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() {
        @Override
        public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
            mBinder = (DownloadService.DownloadBinder) iBinder;
        }

        @Override
        public void onServiceDisconnected(ComponentName componentName) {

        }
    };

    @Override
    protected 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方法。这个方式公开个调用者,让调用者直接调用自己的内部类,这个思路也挺好的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值