[API GUIDE学习笔记]Service
来源:互联网 发布:自私的基因知乎 编辑:程序博客网 时间:2024/06/03 21:01
一、可以把service分成两种类型:
1. start service:独立运行
2.bound service:类似于client和server的形式,可以和客户端交互。
以下几个特点:
1、onStartCommand(Intent intent, int flags, int startId)函数:在使用startService()方法启动service的时候,会回调这个函数。使用bindService()方法启动service的时候,不会调用这个函数。 调用者可以使用intent来传递数据。
onStartComman的返回值有以下几个:
a.START_NOT_STICKY:被系统杀死后不重启。
b.START_STICK:被系统杀死后,重启。
c.START_REDELIVER_INTENT:被杀后,系统会保存它的intent,再伺机重启。
2、IntentService 类:如何需要处理多线程,使用start service的一个好方案是,使用IntentService类。它会创建一个工作线程去处理所有的请求,只要重载onHandleIntent即可。IntentService创建一个工作队列,把所有的请求都加到队列,再一个一个传给工作线程处理。等队列里的任务处理完成,就调用stopService().
3、start service返回结果:可以使用PendingIntent的broadcast,在service完成的时候,通过这个broadcast返回结果。
二、Bound services
创建一个Bound Service需要提供一个IBinder,有三种方法提供IBinder:
1、Extending the Binder class:如果你的服务是作为自己应用程序的后台服务,那么你可以使用这种方式。由于没有跨进程通讯,你可以获取自定义的IBinder的所有方法。甚至是service的所有公共方法或者是自定义类的所有公共方法。代码参考api文档。
2、Using a Messenger:可以实现简单的跨进程通讯,单线程处理。实现步骤参考API文档。基本原理是,通过构造一个包含Hander的Messager,把Hander传递给客户端。
3、Using AIDL:下节介绍。
三、Android Interface Definition Language
1、客户端和服务端约定的语言,把objects 转换成系统可以理解的基元,再把他们按顺序投递。
2、AIDL的方法是直接函数的调用。
a.service的本地线程调用AIDL的方法,会在同一个线程响应。
b.跨进程调用AIDL的方法,会从线程池里面去线程来响应。
3、定义AIDL的接口。
把接口定义到.aidl的文件中,客户端和服务端都需要这份接口文件。SDK Tools会自动生成java接口文件(在gen/文件夹里)。service要实现IBinder的方法,客户端绑定到service,就能访问IBinder的方法。
aidl的参数和返回值可以是任何类型。但是传递objects的时候,需要实现Parcelable
接口,具体参考API文档。
- [API GUIDE学习笔记]Service
- Android API Guide学习笔记
- Api Guide之App resources学习笔记
- android api学习笔记:service
- (API GUIDE 5)Service(服务)
- [API GUIDE 学习笔记]android MediaPlayer 播放视频
- SystemVerilog VMM Workshop Lab Guide(LG)学习笔记-Lab1 VMM Environment & Message Service
- cilk之User Guide学习笔记(7)cilk运行系统API和cilk总结
- 【Android基础笔记02】 API Guide学习和常用布局及基本UI控件
- Android API Guide 之 User Interface笔记
- Android API Guide 之 User Interface笔记
- <Android API Guide学习记录> -- Activities
- Web service学习笔记
- Web Service学习笔记
- web service学习笔记
- Web service学习笔记
- Web Service学习笔记
- Android Service学习笔记
- 生成ssh公有密钥并且注册到Github Generate ssh rsa keys and register public key on Github
- 搭建 PhalconPHP 框架开发环境
- 对 JAVA 多线程的理解
- 开始学习
- do...while(0)的妙用
- [API GUIDE学习笔记]Service
- Lucene-全文索引
- system/exec/fork/pthread基本概念
- eclipse常用快捷键
- 浅谈 JavaScript 处理DOM树形结构
- 教你如何迅速秒杀掉:99%的海量数据处理面试题
- JAVA获取CLASSPATH路径
- 清华EMBA魏杰:中国经济新常态全解析
- androidstudio 快捷键设置