文档章节

Service小结

孤峰无悔
 孤峰无悔
发布于 2016/11/13 00:45
字数 639
阅读 0
收藏 0

 

生命周期

onCreate() -> onstartcommand() -> onstart() -> onDestroy()

•用start方法开启服务,服务只会被创建一次,执行一次onCreate方法,一旦服务创建完成,
 后续调用start去开启服务只会执行onstart和onstartcommand方法

•当调用了stop方法,服务只会调用一次onDestroy方法

绑定服务步骤

1.创建服务类

class MyService extends Service{}

2.定义一个接口,暴露对外提供的方法

public interface IService{
    //隐藏服务的业务逻辑,只对外提供部分逻辑
    public void callServiceMethed();
}

3.在服务类里定义代理对象,定义一个方法可以间接的调用服务的方法

//通过内部类调用服务内部的方法
private class MyBinder extends Binder implements IService{

   public void callServiceMethed(){
      调用服务的方法
   }
   ...
}
这样写的好处:可以防止不想被暴露的方法被别人调用了

4.在onBinder方法里返回代理对象,如果不返回,调用方拿到的对象就是空的

public IBinder onBind(Intent intent) {
    //
     return new MyBinder();
}

5.创建类实现 ServiceConnection,实现里面的两个方法

//内部类
private class MyConn implements ServiceConnection{
    @Override
    public void onServiceConnected(ComponentName name, IBinder service) {
        //当服务连接成功时候调用
        //将绑定的服务转为接口对象
        IService iService = (IService) service;
    }

    @Override
    public void onServiceDisconnected(ComponentName name) {
        //当服务断开连接时调用
    }
 }

6.activity采用绑定的方式开启服务

bindService(intent, new MyConn(),  BIND_AUTO_CREATE);

7.在onServiceConnected方法里强转获取所需要的对象

IService iService = (IService) service;

8.调用代理对象的方法,间接的调用了服务里的方法

开启绑定服务的生命周期

•bindService开启,如果服务不存在,调用 onCreate() -->onBind() ,不会调用 onStart()和onStartCommand()

•unbindService解除绑定,onUnbind() --> onDestroy()

•多次绑定服务,onCreate方法和onBind方法只会执行一次

绑定远程服务调用服务的流程

1.远程服务定义的接口文件不能是.java文件,需要改成.aidl文件,里面的修饰符都不需要

2.原来的代理对象继承对象需要改变

//绑定服务(内部代理类)
private class MyBinder extends Binder implements IService 
--> 
//绑定远程服务(内部代理类)
private class MyBinder extends IService.Stub

3.把远程服务的.aidl文件拷贝到本地工程,包名需要和远程服务的包名一致

4.获取代理对象的方法需要改变

//将绑定的服务转为接口对象
IService iService = (IService) service; 
--> 
//将绑定的服务转为接口对象
IService iService = IService.Stub.asInterface(service);

5.通过代理对象调用远程服务方法

© 著作权归作者所有

共有 人打赏支持
上一篇: 属性动画小结
下一篇: Fragment 碎片
孤峰无悔
粉丝 1
博文 22
码字总数 8266
作品 0
武汉
私信 提问

暂无文章

EOS docker开发环境

使用eos docker镜像是部署本地EOS开发环境的最轻松愉快的方法。使用官方提供的eos docker镜像,你可以快速建立一个eos开发环境,可以迅速启动开发节点和钱包服务器、创建账户、编写智能合约....

汇智网教程
今天
8
0
《唐史原来超有趣》的读后感优秀范文3700字

《唐史原来超有趣》的读后感优秀范文3700字: 作者:花若离。我今天分享的内容《唐史原来超有趣》这本书的读后感,我将这本书看了一遍之后就束之高阁了,不过里面的内容一直在在脑海中回放,...

原创小博客
今天
14
0
IC-CAD Methodology知识图谱

CAD (Computer Aided Design),计算机辅助设计,指利用计算机及其图形设备帮助设计人员进行设计工作,这个定义同样可以用来近似描述IC公司CAD工程师这个岗位的工作。 早期IC公司的CAD岗位最初...

李艳青1987
今天
14
0
CompletableFuture get方法一直阻塞或抛出TimeoutException

问题描述 最近刚刚上线的服务突然抛出大量的TimeoutException,查询后发现是使用了CompletableFuture,并且在执行future.get(5, TimeUnit.SECONDS);时抛出了TimeoutException异常,导致接口响...

xiaolyuh
今天
8
0
dubbo 搭建与使用

官网:http://dubbo.apache.org/en-us/ 一,安装监控中心(可以不安装) admin管理控制台,monitor监控中心 下载 bubbo ops 这个是新版的,需要node.js环境,我没有就用老版的了...

小兵胖胖
今天
16
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部