一 Service:
1.启动方式:
(1)Context.startService();
生命周期执行流程:
第一次启动:
08-25 13:49:43.038 9531 9531 D haohaoding--: onCreate()
08-25 13:49:43.038 9531 9531 D haohaoding--: onStartCommand()
08-25 13:49:43.038 9531 9531 D haohaoding--: onStart()startId:1
反复重启只会执行
08-25 13:49:43.038 9531 9531 D haohaoding--: onStartCommand()
08-25 13:49:43.038 9531 9531 D haohaoding--: onStart()startId:1
并且startId是递增的,其生命周期不会跟随Context的变化而变化,独立存在的,Content销毁被启动的Service不会跟随被销毁,除非调用Context.stopService(); 或者应用程序被kill。当执行Context.stopService()时,Service的onDestroy()方法会被执行,Service销毁。但是应用程序被kill掉不会触发Service的onDestroy()不会被执行。
(2)Context.bindService();
第一次启动:
08-25 14:02:42.982 9531 9531 D haohaoding--: onCreate()
08-25 14:02:42.983 9531 9531 D haohaoding--: onBind()
反复重启不会创建新的service并且不会重新执行任何生命周期方法,其生命周期与Context的生命周期绑定,并且Context销毁会触发service的onDestroy()的执行,同样的Context.unbindService()会触发Service的onDestroy()的执行,但是unbindSerrvice()只能执行一次,多次执行会崩溃,其主要特点是生命周期与Context共存亡,且新创建时会触发onBind()的执行。
2.对比:利用startService可以在任意一个Activity里来控制被启动过的service来做不同的事情,而不是网上说的完全失去了控制,因为我们完全可以利用intent带过去不同的值,在service里的onStartCommand里来判断intent里带来的值,从而达到控制的效果,经过测试时完全可以的,因为不同的activity之间利用startService启动的service是同一个对象实例。
3.场景:
一般说来,bindService使用的场景比较多。另外,混合使用的场景下,只有当所有的调用者释放掉一个service的bind引用(即unbindService),这个时候再用stopService(或者先stopService再释放所有的bind引用),这个service才会结束生命周期。
二 IntentService: