Android四大组件之一之service
来源:互联网 发布:资料器械进销存软件 编辑:程序博客网 时间:2024/05/17 03:35
Service可以长时间运行在后台、不提供用户界面,其他应用app也可以启动Service,即使用户切换到其他的app,Service依然可以运行。Service可跨进程。
一、使用service的方式
1、startService()
2、bindService()
创建绑定式service的三种方式:
1)继承Binder类
1.创建Binder类(子类)
a)应该有一个共有方法,让客户端调用
b)在该公有方法中返回一个Servic的实例
2.Binder的实例会从onBind()方法中返回
3.在客户端的onServiceConnected()中得到Binder实例
2)使用Messenger
可以用在进程间通信。在Service中定义Handler,处理Message。Messenger基于Handler,Messenger可以分享一个IBinder给客户端,可以发送指定到服务端使用message对象。
是进程间通信的最简单方式。
Messenger是Service的接口,
如何使用Messenger:
1.实现Handler
2.Handler用来创建Messenger对象
3.Messenger创建IBinder对象,并且把IBinder对象通过onBind()方法,返回给客户端。
4.客户端利用IBinder生成Messenger
5.客户端利用Messenger发送消息Message对象到服务器
6.在服务端,接收message在Handler中
3)AIDL:
1.把MBinder私有了
2.把要提供出去的方法,定义在接口(外部类)中Inter
3.把Inter 的.java文件改成.aidl文件
4.看到gen文件夹下的包中多了一个Inter.java,该文件中,有一个静态内部类Stub,继承了Binder,实现Inter
5.让MBinder继承Stub
客户端:
绑定是不变的,只不过,在onServiceConnected()方法中IBinder对象---》转换成接口Inter的对象:Stub.asInterfase(ibinser)
只要客户端拿到Inter的对象,就可以调用Service要提供出来的方法。
非同一个app使用/调用Service中的提供出来的方法,提供出来的方法规定在接口中。
把Server中定义的aidl文件拿过来,放在src文件夹下包中--》包名字必须和定义接口的包一模一样
其他代码跟同一app调用aidl服务---》一样
二、创建service
1、创建Service子类,重写方法,比较重要的需要重写的方法:
onStartCommand():另外一个组件调用startService()请求启动这个Service的时候,会调用该方法。一旦该方法执行了,Service就已经开启起来了,运行在后台,独立的。一旦Service的事情做完,应该停掉Service:stopSelf()、stopService().
onBind():另外一个组件通过调用bindService()方法想要绑定到Service上的时候,系统会调用onBind()方法。必须要返回一个接口IBinder,接口--》让绑定者跟Service交流。如果不允许其他组件绑定上来,返回null。
onCreate():Service第一次创建执行。该方法先于onStartCommand()、onBind()。
onDestroy():当Service不再被使用的时候,被销毁。通常情况下需要重写该方法,来清理一些东西:线程、监听……
一旦Service开启起来之后,将会保持运行,直到Service自己stopSelf()、其他组件调用stopService()
bindService()创建Service对象,该Service跟绑定者共存亡,所有的绑定者都解绑了,系统销毁Service
注册:
2、清单文件中,Application节点中添加子节点:Service---》name
跟Activity一样,也可以声明意图过滤器,让设备上的任意一个app都可以启动该Service
Service被声明为私有的:通过Exported属性false
三、生命周期
第一次startService的时候:
onCreate()、onStartCommand()-->传值
再次点击开启Service:
onstartCommand();--->继续传值
当系统内存过低的时候,系统为了恢复资源,就会强制停止Service,如果Service上绑定了一个位于界面最前面(拥有用户焦点)Activity,该Service被杀死的可能性比较小。如果Service被声明为前台Service,几乎不会被杀死。Service运行时间过长,随着时间的推移,系统杀死该Service的可能性会越来越大。系统内存资源恢复的时候,会重启Service(虽然系统会重启Service,还取决于onStartConmmand()方法)。合理设计重启操作。
生命周期方法:
StartService第一次:onCreate()、onStartCommand()
startService再次:onStartCommand()
stopService:onDestory()
- Android四大组件之一之service
- Android之四大组件之一-Service(二)
- Android 四大组件之一Service
- Android 四大组件之一 Service
- Android四大组件之一:Service
- Android四大组件之一Service
- android四大组件之一Service
- Android 四大组件之一Service
- service Android 四大组件之一
- Android 四大组件之一:Service后台服务之IntentService
- Android之四大组件之一-Service(一)
- Android:四大组件之一service小结
- Android四大组件之一Service(服务)
- 关于Android四大组件之一Service
- Android 四大组件之一:Service 后台运行
- Android四大组件之一:Service(服务)
- Android四大组件之一 -- Service详解
- Android Studio 四大组件之一 Service简介
- WF 绘制图片的部分
- 使用matlab版本计算HOG 最为简单的计算方法 使用 vlfeat
- ns3的基础学习
- iOS多线程-------线程的状态
- HDU2955
- Android四大组件之一之service
- 基于STM32的函数信号发生器设计(下:软件设计)
- [模拟][NOIP2010] 机器翻译
- Cocos2d-x的学习之旅(一)扫盲篇
- HDU1864
- 关于C++函数思考1(缺省的六大函数)
- IDF实验室-抓到一只苍蝇
- IOS CoreText.framework --- 基本用法
- C++刷题——线段分割平面