文档章节

Service小结

孤峰无悔
 孤峰无悔
发布于 2016/11/13 00:45
字数 639
阅读 0
收藏 0
点赞 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
武汉

暂无相关文章

JavaScript零基础入门——(八)JavaScript的数组

JavaScript零基础入门——(八)JavaScript的数组 欢迎大家回到我们的JavaScript零基础入门,上一节课我们讲了有关JavaScript正则表达式的相关知识点,便于大家更好的对字符串进行处理。这一...

JandenMa ⋅ 今天 ⋅ 0

sbt网络问题解决方案

转自:http://dblab.xmu.edu.cn/blog/maven-network-problem/ cd ~/.sbt/launchers/0.13.9unzip -q ./sbt-launch.jar 修改 vi sbt/sbt.boot.properties 增加一个oschina库地址: [reposit......

狐狸老侠 ⋅ 今天 ⋅ 0

大数据,必须掌握的10项顶级安全技术

我们看到越来越多的数据泄漏事故、勒索软件和其他类型的网络攻击,这使得安全成为一个热门话题。 去年,企业IT面临的威胁仍然处于非常高的水平,每天都会看到媒体报道大量数据泄漏事故和攻击...

p柯西 ⋅ 今天 ⋅ 0

Linux下安装配置Hadoop2.7.6

前提 安装jdk 下载 wget http://mirrors.hust.edu.cn/apache/hadoop/common/hadoop-2.7.6/hadoop-2.7.6.tar.gz 解压 配置 vim /etc/profile # 配置java环境变量 export JAVA_HOME=/opt/jdk1......

晨猫 ⋅ 今天 ⋅ 0

crontab工具介绍

crontab crontab 是一个用于设置周期性被执行的任务工具。 周期性执行的任务列表称为Cron Table crontab(选项)(参数) -e:编辑该用户的计时器设置; -l:列出该用户的计时器设置; -r:删除该...

Linux学习笔记 ⋅ 今天 ⋅ 0

深入Java多线程——Java内存模型深入(2)

5. final域的内存语义 5.1 final域的重排序规则 1.对于final域,编译器和处理器要遵守两个重排序规则: (1)在构造函数内对一个final域的写入,与随后把这个被构造对象的引用赋值给一个引用...

江左煤郎 ⋅ 今天 ⋅ 0

面试-正向代理和反向代理

面试-正向代理和反向代理 Nginx 是一个高性能的反向代理服务器,但同时也支持正向代理方式的配置。

秋日芒草 ⋅ 今天 ⋅ 0

Spring 依赖注入(DI)

1、Setter方法注入: 通过设置方法注入依赖。这种方法既简单又常用。 类中定义set()方法: public class HelloWorldOutput{ HelloWorld helloWorld; public void setHelloWorld...

霍淇滨 ⋅ 昨天 ⋅ 0

马氏距离与欧氏距离

马氏距离 马氏距离也可以定义为两个服从同一分布并且其协方差矩阵为Σ的随机变量之间的差异程度。 如果协方差矩阵为单位矩阵,那么马氏距离就简化为欧氏距离,如果协方差矩阵为对角阵,则其也...

漫步当下 ⋅ 昨天 ⋅ 0

聊聊spring cloud的RequestRateLimiterGatewayFilter

序 本文主要研究一下spring cloud的RequestRateLimiterGatewayFilter GatewayAutoConfiguration @Configuration@ConditionalOnProperty(name = "spring.cloud.gateway.enabled", matchIfMi......

go4it ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部