android之service理解
来源:互联网 发布:2016网络流行成语 编辑:程序博客网 时间:2024/06/10 22:52
1,service的启动方式有2中,client通过startservice()或是bindservice()。详见:http://developer.android.com/reference/android/app/Service.html
(1)当通过startservice()启动service时,service会调用自己的oncreate()方法,然后onstartcommand()方法;这种方式的service运行模式有3种情况【For started services, there are two additional major modes of operation they can decide to run in, depending on the value they return from onStartCommand():START_STICKY
is used for services that are explicitly started and stopped as needed,
while START_NOT_STICKY
or START_REDELIVER_INTENT
are used for services that should only remain running while processing any commands sent to them. 】当想要终止service运行时,client可以调用stopservice()或是service调用自己的stopself()。
(2)当通过bindservice开启service时,此时service不调用startcommand()方法启动,而是调用自己的onbind()方法,然后返回IBinder接口对象给client;在client在调用bindservice()前要先实例化serviceconnection接口对象并实现其中的方法,其中onserviceconnected方法来获取service返回的IBinder对象(此后就要通过这个Ibinder获取服务了),然后就是调用bindservice()方法了,方法原型:bindservice(intent service, serviceconnection conn, int flags);注意这种service提供服务可以通过继承binder并添加自己的服务方法。
(3)当实现RPC时,android提供了一种工具,AIDL可以帮我们免去一些繁琐的工作。android会根据aidl文件生成一个java接口类,此接口类中有一个内部类(stub类),我们在service中继承此类,而后实例化此类,在service调用onbind()方法时将此实例对象返回给client。client就可以提供这个对象来实现服务了。
(4)onstartConmmand()的返回值,
1,START_NOT_STICKY:如果系统在onStartCommand方法返回之后杀死这个服务, 那么知道接受新的intent重新启动此service,这是最安全的启动方式,用来在不需要的时候运行你的service。(重新启动会执行onstartCommand);
2,START_STICKY:如果系统在onStartCommand方法返回之后杀死这个服务,那么系统会重新以一个null的intent启动此service,这种方式是一种无限期的等待任务的到来。(重新启动会执行onstartCommand);
3,START_REDELIVER_INTENT:如果系统在onStartCommand方法返回之后杀死这个服务,那么系统就用最后发送给此service的intent来重新启动该service,任意等待中的intent也会依次被发送来处理。(重新启动会执行onstartCommand);
(5)IntentService和Service的区别:IntentService使用队列的方式将请求的Intent加入队列,然后开启一个worker thread(线程)来处理队列中的Intent,对于异步的startService请求,IntentService会处理完成一个之后再处理第二个,每一个请求都会在一个单独的worker thread中处理,不会阻塞应用程序的主线程,这里就给我们提供了一个思路,如果有耗时的操作与其在Service里面开启新线程还不如使用IntentService来处理耗时操作。而在一般的继承Service里面如果要进行耗时操作就必须另开线程,但是使用IntentService就可以直接在里面进行耗时操作,因为默认实现了一个worker thread。对于异步的startService请求,IntentService会处理完成一个之后再处理第二个。
(6)具体结合android官网讲解http://developer.android.com/guide/components/services.html
- android之service理解
- android 理解service服务
- Android 中的 Service理解
- Android Service 深入理解
- android service简单理解
- android编程-Service理解
- Android service理解
- Android Service生命周期理解
- Android Service onStartCommand 理解
- android service理解
- android service理解
- Android Service个人理解
- 理解Android Service
- 清晰理解 Android Service
- android Service 之Bound Service
- Android Service 之Bound Service
- android Service 之Bound Service
- android Service 之Bound Service
- Codeforces Round #134 (Div. 2) C. Ice Skating
- gsoap的第一次使用
- 几乎包括了UISegmentedControl的所有属性和方法
- vc 屏幕上绘制透明矩形框(可设置颜色,宽度)
- Ubuntu与Win7双系统内 grub引导的错误的解决
- android之service理解
- activemq初级
- ZOJ1414 Number Steps
- [LeetCode]Valid Parentheses
- linux shell——遍历文件夹中的文件
- 从HelloWorld看iphone程序的生命周期
- 蓝桥 幸运数
- 在桥模式下,为什么能接受三层的数据包?求指导!!!!!!
- pentaho5.0的环境搭建