安卓四大组件之Service

很多情况下,一些与用户很少需要产生交互的应用程序,我们一般让他们在后台运行就行了,而且在他们运行期间我们仍然能运用其他的应用。为了处理这种后台进程,Android引进了service的概念。

 服务的特点:service在Android中是一种长生命周期的组件,它不实现任何用户界面,是一个没有界面的组件,由其他组件开启。service长期在后台运行,执行不关乎界面的一些操作比如:新闻客户端每隔一段时间去查看是否有最新的新闻。监听电话来点显示。service和其他组件一样,都是运行在主线程中,因此不能用它来做耗时操作。

Android中的进程种类:

Android进程的回收机制:

它会根据优先级进行回收。系统会尽可能的维持程序的进程,当系统内存不够用时,会把空进程一个一个回收掉。当回收完所有的空进程时还不够用时,继续向上回收后台进程,一次类推。但是当回收服务,可视,前台着三种进程时,系统非必要情况下不会轻易回收,如果回收掉这三种进程,那么在系统内存够用时,会再给重新启动进程。如果是用户手动关闭的服务,就不会再重启了。

Android为什么用服务而不是线程?

Android程序在第一次启动的时候会开启一个进程给这个程序来使用。Android一个应用的程序把所有的界面关闭时,进程还没有被销毁,现在处于的是空进程状态,而thread运行在空进程中很容易被销毁。服务不容易被销毁,如果非法状态下被销毁了,系统会在内存够用时重新启动。


Android中如何使用service

 创建Service,定义类继承service,Androidmanifest.xml中定义《service》

 开启Service,在其他组件中调用startService方法

 startService在activity中直接调用,会执行onstartCommand,oncreate只会执行一次,服务一旦被创建出来,就不会再执行oncreate方法,以后再去开启服务只会执行onStarCommend.

停止Service,调用stopService方法,会执行ondestory()


注意:服务在执行生命周期方法时,也是一个前台进程。广播接收者和它类似,在执行生命周期方法onreceive时,也是一个前台进程。

Service的生命周期

Service有两种不同的启动开启方式,一个是直接onstart,另一个是绑定服务。

      A:标准开启模式,被开启的Service通过其他组件调用startService被创建。这种服务可以无限的运行下去,必须调用stopself方法或者其他组件调用stopService方法来停止它。当Service被停止时,系统会销毁它。

     B:绑定模式,被绑定的Service当其他组件调用bindService来创建的。客户通过一个ibinder接口和Service进行通信。客户可以通过unbindservive方法来关闭这种连接。一个Service可以同时和多个客户绑定,当多个客户都解除绑定之后,系统会销毁Service。

  注意一点Service的这两种生命周期并不是完全分开的。也就是说你可以和一个已经调用了startservice的服务来进行绑定。

两者的区别:1,通过start直接启动服务,一旦服务开启,就与调用者没有任何关系,调用者的activity即使退出,也不会影响后台服务运行。而绑定服务的activity退出了,那么他绑定的服务也就跟着退出。绑定服务的activity退出时重写activity的Ondestory方法,方法内部调用unbindService,去解除服务的绑定。

  2,start直接启动服务的方法,调用者不能调用服务内部的方法。绑定服务启动时,可以利用Serviceconnection接口获取服务的ibinder对象,通过这个对象可以实现自定义的接口。












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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值