Android总结01_服务

来源:互联网 发布:移动公司网络部 编辑:程序博客网 时间:2024/06/06 04:32

Android服务(Service):顾名思义,就是和windows平台的服务一样,在后台默默的承担某些任务执行着,一般的实例例如音乐播放,后台wlan更新,定期访问某些接口等等

Service共分为两种:

1.无返回值的启动服务startService(),该服务不与前台产生任何关联,只能通过stopself()或者stopService()来关闭

2.有返回值的启动服务bindService(),改服务会在service启动后返回给启动器一个返回值,然后可以通过返回的IBinder对象来进行通信,当启动器关闭时,其也跟着关闭(必须有界面吗?)

生命周期方法

startService(Intent service)-->onCreate()-->onStartCommand(Intent intent,int flags,int startId)(多次启动,多次执行)->onDestroy()

startService()方法,由于每一个都是单例模式,所以每次启动传入的intent可以相同,也可以不同,每次启动时,onStartCommand方法都会执行一次,onStartCommand方法里面的第一个参数intent就是startService()里面传入的intent.

bindService(Intent service,ServiceConnection conn,int flags)->onCreate()->onBind(Intent intent)->onDestroy()

bindService()方法,每次启动时只能启动一次,即每一个activity都只能启动一次(启动不关闭的情况),多次bindService()并不会重复执行.

bindService()方法的第二个参数需要传一个ServiceConnection的实例化对象过去,用来保证activity和service之间的联系,第二个参数可以为空(但是写null时却报了错误,不知道在具体什么情况下才可以传null),到了OnBind()方法时,与startService()方法一样,intent都是启动时候传过来的service(),OnBind()方法需要返回一个IBinder对象,但不能新建一个类实现IBinder接口,那样返回的IBinder,系统不会将其送到ServiceConnection中的onServiceConnected方法中,返回的应该为Binder的子类对象.第二个activity实现bindService,也会获取同一个Binder的子类对象,但是并不会执行OnBind方法,只会执行ServiceConnection中的onServiceConnected方法,意思就是已经连接上了


目前服务可以在某些品牌手机清理时被杀死,已经在以前的文章列表中体现出来了

下面说一下onstartCommand的返回值,这个就是从别处照抄的

  • START_STICKY(常量值:1):sticky的意思是“粘性的”。使用这个返回值时,我们启动的服务跟应用程序"粘"在一起,如果在执行完onStartCommand后,服务被异常kill掉,系统会自动重启该服务。当再次启动服务时,传入的第一个参数将为null;
  • START_NOT_STICKY(常量值:2):“非粘性的”。使用这个返回值时,如果在执行完onStartCommand后,服务被异常kill掉,系统不会自动重启该服务。
  • START_REDELIVER_INTENT(常量值:3):重传Intent。使用这个返回值时,如果在执行完onStartCommand后,服务被异常kill掉,系统会自动重启该服务,并将Intent的值传入。
  • 【备注:】
    以上三种情况,可以理解为发生车祸后的人:
  • START_STICKY(常量值:1)车祸后自己苏醒,但是失忆;
    • START_NOT_STICKY(常量值:2)车祸后再也没有苏醒;
    • START_REDELIVER_INTENT(常量值:3)车祸后自己苏醒,依然保持记忆。

可以通过bindService和StartService方法访问同一个service,但是其中一个关闭了并不会导致service关闭,必须得两者都被关闭后,service才会关闭





1 0
原创粉丝点击