Android Service知识点总结

以下是阅读Android官方文档Service这一章节的一些总结,写出来方便以后温习,希望对大家有所帮助:

 
1.Service可以实现IPC(   interprocess communication  )
2.Service可以实现网络请求,播放音乐,IO操作,和content provider交互,并且都在后台执行。
3.Service的两种形式:
(1)Started形式:通过调用   startService()启动,即使调用者销毁,Service也不会销毁。用于不用和调用者交互的情况。
(2)Bound形式:通过调用   bindService()启动,Service需要提供和调用者交互的接口,发送请求或者获取结果,甚至进行IPC。Bound Service只在调用者的组件运行的时候。多个组件可同时绑定到一个service,但是当他们都效果的时候,service也会销毁掉。
(3)service可同时以上述两种形式工作。最通常的形式是实现以下两个方法:onStartCommand()来实现Started形式,onBind来允许绑定形式。(比如可以绑定一个已经通过startService()调用的Service,在这种情况下,stopService()或者stopSelf()不会停止Service,而是会等到所有的绑定者解绑),通过startService调用onStartCommand()的Service也可能通过绑定调用onBind。

4.Service是运行在主线程上的,而没有创建自己的线程。所以如果Service如果要完成阻塞的操作(如播放MP3或者和网络交互),需要新建一个线程来完成这些工作来减少ANR。
5.Service中需要重写的重要方法:
(1)onStartCommand():当调用者调用startService()时系统会回调此方法(如果只是绑定的形式启动Service不必重写此方法)。如果实现了此方法,需要在工作完成之后调用   stopSelf()  或者 stopService()。
     onStartCommand()必须要返回int类型的数字,这个数字描述了如果Service被系统Kill掉之后,怎样恢复他。
(2)onBind():当其他组件想绑定Service时调用bindService(),系统会回调此方法。在实现这个方法的时候,必须要提供一个和调用者交互的接口(返回一个IBinder)。如果Service不允许绑定,在此方法返回null即可。
(3)onCreate():当Service第一次创建的时候系统会回调此方法(在onStartCommand()或者onBind()之前调用)。如果Service已经运行了,这个方法不会被调用。
(4)onDestroy():需要在此方法里面清理所引用的资源。
总结:1.通过   startService()  调用Service,会使得调用   onStartCommand()(可以收到Intent),直到Service自己调用 stopSelf()(或 stopSelf(int) startId通过 onStartCommand传递  或者调用者调用 stopService()来结束。 
      2.通过 bindService()  调用Service,不会调用onStartCommand(),当从绑定的组件解绑,Service就会销毁。

6.Service必须在manifest中声明(在 <application>标签下),android:exported = "false"将使得Service只被自己的应用使用。
7.前景Service(Foreground Service)被认为是用户关注的组件,所以在系统内存低的情况下不容易被kill掉。前景Service必须要在状态栏提供一个notification,并且需要在"Ongoing"中,意味着这个notification不能消失,除非Service停止或者从前景消失。(通过 startForeground()和stopForeground()切换)。如果某个Service正在前景运行,调用stopForeground(),notification也会同样消失。
8.Service的生命周期:(和Activity不同,Service的回调方法不必调用父方法)
9. Bound Services
基础:一个Bound Service是实现了Service类,重写onBind()回调方法,这个返回一个IBinder对象,这个对象定义了调用者和Service交互的接口。
调用者必须调用bindService()方法,并且实现ServiceConnection类来监听和Service的连接。bindService()会立刻又返回值,但是系统建立调用者与Service的连接时,会回调ServiceConnection中的onServiceConnected()方法,通过传递IBinder来实现和Service的通信。最重要的是onBind()回调方法的返回值,有以下几种方式来定义service的IBinder接口:
(1)继承Binder类(推荐):本应用使用service,并且不必跨进程。步骤:
1.创建一个Binder的实例来实现以下功能:包括public的方法可以被调用者使用;返回当前Service的实例以使得其中的public方法可以被调用;返回另外一个类的实例,这个类持有Service的实例,来调用其中的方法。
2.在onBind()方法中返回步骤一中的Binder实例。
3.在调用者的onServiceConnected回调方法中拿到步骤2中该Binder。
(2)使用Messenger:
(3)使用AIDL。
          绑定Service方法:
(1)实现   ServiceConnection,重写其中两个方法onServiceConnected(),onServiceDisconnected()(当unBind()的时候不会调用该方法)。
(2)调用 bindService()把步骤1中的   ServiceConnection作为参数传入。
(3)当系统调用   onServiceConnected()时,可以通过Service定义的方法进行交互。
(4)解绑时调用unbindService()
 






  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值