前段时间看了一些大神写的博客,看了这些大神如何从菜鸟一步一步进阶到如今的实力,我是相当的羡慕,很多大神还列出了每个阶段应该掌握的知识点,我对比了一下我自己,我觉得我最近是太浮躁了,每个新知识点都想要第一时间去了解,以至于很多很基础的东西都不记得怎么去使用了,最近的在做下载更新这块,我才想起,我的service已经忘了怎么使用了,这下,我才感觉自己基础太弱了。然后又花了一点儿时间把service重新了解了一下,在此做下总结,希望自己能够把基础打扎实,二是方便自己以后查看。
第一步:创建一个类继承service,
1、如果需要activity和service做交互的话,我们采用 bindService()开启服务;可重写onCreate()、onBind()、onUnbind()、onDestroy();
2、如果不需要做交互,就比如音乐后台播放,或者下载类,我们就可以采用StartService()方法开启服务,这里就需要重写onCreate()、onStartCommond()、onDestroy();
第二步:在activity里面调用服务,由第一步可知,服务的调用有两种方法,
1、一种简单的,就是startService(intent),在需要停止服务的地方调用stopService(intent)即可,这种完全有种“放养式”,只要不调用stopService(intent),就不会停下来,即时程序退出去了也不会停,相对来说控制这种比较简单
2、第二种就是绑定服务,这个在组件调用服务通过 bindService(intent,serviceConnection, BIND_AUTO_CREATE);
不需要服务的时候调用
unbindService(serviceConnection);
这里特别说明一下这个serviceConntetion
新建了一个ServiceConnection实例,重写里面的两个方法,第一个方法是通过里面的service获取我们需要的东西,这个在重写Service里面写一个内部类继承Binder,在里面可以写上我们需要和activity交互的方法和数据,通过onBind()返回回来,我们就可以通过这个获取我们从service得到的数据。第二个方法一般不会被调用,当Service服务被异外销毁时,例如内存的资源不足时这个方法才被自动调用。
执行顺序
当我们采用startService(intent)时,调用顺序onCreate()、onStartCommand()、我们直接退出程序,也不会有什么变化,再次进入程序调用服务时只会执行onStartCommand()而不会执行onCreate()方法,只有调用了stopService()才会执行onDestroy()方法。
如果我们采用bindService()方法时,调用顺序为onCreate()、onBind(),进而会执行onServiceConnected()方法、退出程序或者执行unbindService(serviceConnection),则会执行onUnbind()、onDestroy()。这个过程中,我们实现了binder的通信机制。