Service相关知识
先从生命周期说起吧:
首先他有三个生命周期,分别是:onCreate(),onStartCommand(),onDestroy()。
首先(第一次)当服务被启动了调用,会调用onCreate(),onStartCommand(),第二次或者以后再启动这个服务的时候,只会调用onStartCommand(),因为onCreate()只会在还未创建的时候,会调用,而onDestroy(),顾名思义,服务被销毁的时候会被调用。
我们再来看看服务的启动方式:
有两种,分别是:startService();bindService();
我们看到这里,是不是会想,这两种启动方式有什么区别吗?
答:按我理解的话,我是这样想的,startService()只是启动了服务,可以在后台运行了,但是我们想对这个服务做什么的时候,我们是没办法的,所以我们如果想让服务跟Activity进行通信,就必须通过bindService(),进行绑定,通过onBind()返回的IBinder对象进行通信,
这里我们首先创建了一个ServiceConnection的匿名类,在里面重写了onServiceConnected()方法和onServiceDisconnected()方法,这两个方法分别会在Activity与Service建立关联和解除关联的时候调用。在onServiceConnected()方法中,我们又通过向下转型得到了MyBinder的实例,有了这个实例,Activity和Service之间的关系就变得非常紧密了。现在我们可以在Activity中根据具体的场景来调用MyBinder中的任何public方法,即实现了Activity指挥Service干什么Service就去干什么的功能。
其实销毁服务也是需要一门学问的
我们都知道启动服务可以startService(),销毁服务就直接调用stopService(),还有bindService()启动服务,UnbindService()解绑销毁服务,很简单没错是这样,但是你有没有试过先调用startService(),然后再调用bindService(),这个时候你会发现你单独点击stopService()或者UnbindService(),服务是不会被销毁的,那要怎样才会被销毁呢?其实要两个都要点击才行,StopService()只是停止服务,Unbindservice()会让Service和Activity解除关联,一个Service必须要在既没有和任何Activity关联又处理停止状态的时候才会被销毁。
你可以参照一下郭神的这篇文章:Android Service完全解析,关于服务你所需知道的一切(上)