文档章节

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.通过代理对象调用远程服务方法

© 著作权归作者所有

共有 人打赏支持
孤峰无悔
粉丝 1
博文 22
码字总数 8266
作品 0
武汉

暂无文章

阿里云API网关使用教程

API 网关(API Gateway)提供高性能、高可用的 API 托管服务,帮助用户对外开放其部署在 ECS、容器服务等阿里云产品上的应用,提供完整的 API 发布、管理、维护生命周期管理。用户只需进行简...

mcy0425
36分钟前
4
0
解决远程登陆误按ctrl+s锁屏假死恢复

使用putty时,偶尔发生屏幕假死,不能输入等情况。 后来发现,只要数据ctrl+s,就会假死;输入ctrl+q就可以恢复过来。 很多刚从windows转移到linux上来工作的朋友,在用vi/vim编辑文件时,常常...

HJCui
39分钟前
0
0
@Transactional

事务管理是应用系统开发中必不可少的一部分。Spring 为事务管理提供了丰富的功能支持。Spring 事务管理分为编程式和声明式的两种方式。编程式事务指的是通过编码方式实现事务;声明式事务基于...

asdf08442a
44分钟前
2
0
widows下强制解除8080端口占用问题

使用win+R打开命令窗口 输入以下命令查看哪个任务占用了8080端口 netstat -ano |findstr "8080" 然后通过任务id强制关闭占用该端口的进程 tskill 10044 // 自己的试情况而定,这个ID是LISTE...

_Artisan
53分钟前
2
0
productFlavors简单实用

最近项目中,不同环境需要配置的参数越来越多,为了减少修改代码次数。研究了一下productFlavors的使用方式,总结如下 1. as3.0以上版本使用productFlavors时需要指定一个flavorDimensions,...

火云
55分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部