Android四大组件--服务

来源:互联网 发布:靳东实际人品知乎 编辑:程序博客网 时间:2024/05/20 06:28

android基础–服务

  • 01.绑定服务的开发流程
  • 02.绑定服务和不绑定服务的操作
  • 03.远程服务AIDL的基本编写思路

activity调用service方法

  • 以startService方式开启服务

    1. 服务不能创建对象,自己创建的对象得不到上下文对象2. startService不能获取服务对象
  • 以bindService() 绑定服务方式开启服务

    * 我们无法直接从activity中service对象,但是可以间接的获取到服务中的方法* 基本实现原理: 在service的内部创建一个内部类,间接调用方法* 操作步骤:    * 服务中:        1. 写一个类继承binder,调用服务中的方法        2. 绑定服务,在方法onBind返回: 内部类对象    * activity中:         3. 在点击事件或onCreatActivity方法中,绑定服务: bindService(绑定的服务意图对象,通讯频道(同.办证电话),当服务不存在自动创建出来: BIND_AUTO_CREATE)            1>. 通讯频道conn: 创建一个类实现ServiceConnection接口            2>. 在实现类中,有一个方法: onServiceConnected中的 IBinder service就是中间代理人            3>. 将service强制类型转换为MyBinder对象绑定服务的升级版: 隐藏实现方法,对外提供公共访问接口    1. 定义接口,暴露部分方法  //作用: 可以屏蔽service内部类的方法    2. service内部类实现接口,重写接口中的抽象方法    3. activity中,定义private 接口的成员变量,强制类型转换为接口的对象

    注意: 1.service需要配置清单文件(name: 类名加全包名),否则系统会抛出异常; 2. 在onBind记得返回自定义的内部类对象

绑定服务的生命周期

  • 绑定的方式开启服务: oncreate–>onbind–都会只执行一次,绑定只能绑定一次,不会调用 onStart()和onStartCommand()
  • 解除绑定: onunbind–>ondestroy–服务只可以被解绑一次,如果多次解绑会有状态异常

混合式服务

  • 应用场景: 保证能后台长期运行,又能调用到服务里面的方法

  • 严格按照步骤编写代码:

    1.start方式开启服务 ->保证服务在后台能够长时间运行2.bind方式绑定服务 ->绑定了服务,方便调用服务里的方法3.unBind方式解绑4.stop方式停止服务

本地服务和远程服务

本地服务(local service): 服务代码运行在当前程序内部
远程服务(remote service): 服务代码运行在另外一个程序

重要概念

  1. 进程: 操作系统分配独立的内存空间.独立是指每个进程都是有自己的内存空间,不同进程是不能相互访问的(保证进程间的安全),若想要访问需要通过IPC
  2. IPC: 进程间通讯.在系统底层,有一块公共的内存空间(BINDER(IPC)驱动),不同进程可以通过将数据存储到该公共空间,进行数据交换
  3. Android中: aidl是将底层(BINDER(IPC)驱动)的实现过程包装的成一套: 安卓接口定义语言

AIDL

定义: AIDL 是Android 的一种接口描述语言。编译器可以通过aidl 文件生成一段代码,通过预先定义的接口达到两个进程内部通信进程的目的.

在Activity 里的代码需要访问Service 中的一个方法,操作步骤:

1. 远程服务:    1. 改接口后缀名aidl,并删除接口修饰符: public,private    2. service中MyBinder继承IService.Stub2. 本地:    1. 将远程服务aidl文件考到工程目录,包名必须一致    2. 得到远程服务的代理对象    3. 调用远程服务的方法

应用场景: 主要是不同应用之间的相互访问

0 0