2019-05-28

服务下载例子的感想(小白)

一、Okhttp网络请求(以下载为例)

    1.创建一个客户机;

    2.发送请求Request通过Builder增加(请求头,网址等信息);

    3.通过客户机实例的newCall(request).execute()获取服务器的回复response;

    4.response包中的body部分的比特流转给InputSteam输入流返回终端。





二、service与activity(或其他组件)的通信(以下载为例)

    1.一个必备的service 和activity。

    2.如果要实现绑定两者的绑定。(原理如下)

            2.1 定义一个XXXBinder(继承自Binder)去定义一些与activity交互的

                  方法,便于activity控制服务的运行。

            2.2通过活动bindService()方法,然后service服务的onBind方法返回上面的自定义binder的对象进而

                 进行控制。



此处有个问题:

            在活动调用bindService方法表面是实现了绑定,但是这个过程是异步的,

这就相当于说:我调用过了bindService方法过了,我要去做其他事情了,至于系统你

返回不返回我需要的那个binder(真正需要的东西)我不关心。事实上bindService并不

会返回binder给activity。那也就是说我即使调用过bindService()方法,我还是没法

实现activity控制service(因为需要biner的实例控制服务)。

                Binder是如何实现控制service的?继承自Binder的自定义Binder写方法控制服务,

activity获取Binder实例调用这些方法实现。


        3.上述给出的解决方案:在activity创建一个ServiceConnection实例,就是说在bindService()

        方法中传入这 个实例,这个方法会有个回调方法onServiceConnected可以返回我们

        需要的Binder,获取这个实例,通过实例操作。


总结来说:重点就是activity控制service并不是通过bindService()实现的,真正的就是Binder的实例方法。

                   而获取Binder的实例是通过一个ServiceConnection中的回调方法获取。

你可能感兴趣的:(2019-05-28)