單獨使用startService
onCreate()->onStartCommand()->Running->onDestroy()
單獨使用bindService
onCreate()->onBind()->Running->onUnbind()->onDestroy()
混用
startService與bindService混合使用的執行順序無非就是四種。現有serviceA執行個體,執行個體中列印了生命周期的各個方法,四種情況的執行結果如下:
-
startService -> bindService->stopService -> unbindService
08-09 10:57:27.410 18963-18963/com.lb.secdemo I/secDemo: startService
08-09 10:57:27.435 18963-18963/com.lb.secdemo I/secDemo: serviceA onCreate
08-09 10:57:27.436 18963-18963/com.lb.secdemo I/secDemo: serviceA onStartCommand
08-09 10:57:31.304 18963-18963/com.lb.secdemo I/secDemo: bindService
08-09 10:57:31.319 18963-18963/com.lb.secdemo I/secDemo: serviceA onBind
08-09 10:57:44.391 18963-18963/com.lb.secdemo I/secDemo: stopService
08-09 10:57:50.749 18963-18963/com.lb.secdemo I/secDemo: unbindService
08-09 10:57:50.761 18963-18963/com.lb.secdemo I/secDemo: serviceA onUnbind
08-09 10:57:50.762 18963-18963/com.lb.secdemo I/secDemo: serviceA onDestroy
-
startService -> bindService->unbindService -> stopService
08-09 11:01:00.221 19420-19420/com.lb.secdemo I/secDemo: startService
08-09 11:01:00.240 19420-19420/com.lb.secdemo I/secDemo: serviceA onCreate
08-09 11:01:00.241 19420-19420/com.lb.secdemo I/secDemo: serviceA onStartCommand
08-09 11:01:03.146 19420-19420/com.lb.secdemo I/secDemo: bindService
08-09 11:01:03.168 19420-19420/com.lb.secdemo I/secDemo: serviceA onBind
08-09 11:01:07.139 19420-19420/com.lb.secdemo I/secDemo: unbindService
08-09 11:01:07.144 19420-19420/com.lb.secdemo I/secDemo: serviceA onUnbind
08-09 11:01:22.781 19420-19420/com.lb.secdemo I/secDemo: stopService
08-09 11:01:22.789 19420-19420/com.lb.secdemo I/secDemo: serviceA onDestroy
-
bindService -> startService->stopService -> unbindService
08-09 11:03:07.336 20032-20032/com.lb.secdemo I/secDemo: bindService
08-09 11:03:07.349 20032-20032/com.lb.secdemo I/secDemo: serviceA onCreate
08-09 11:03:07.353 20032-20032/com.lb.secdemo I/secDemo: serviceA onBind
08-09 11:03:13.074 20032-20032/com.lb.secdemo I/secDemo: startService
08-09 11:03:13.092 20032-20032/com.lb.secdemo I/secDemo: serviceA onStartCommand
08-09 11:03:19.254 20032-20032/com.lb.secdemo I/secDemo: stopService
08-09 11:03:21.529 20032-20032/com.lb.secdemo I/secDemo: serviceA unbindService
08-09 11:03:21.546 20032-20032/com.lb.secdemo I/secDemo: serviceA onUnbind
08-09 11:03:21.551 20032-20032/com.lb.secdemo I/secDemo: serviceA onDestroy
-
bindService -> startService->unbindService -> stopService
08-09 11:01:58.195 19758-19758/com.lb.secdemo I/secDemo: bindService
08-09 11:01:58.212 19758-19758/com.lb.secdemo I/secDemo: serviceA onCreate
08-09 11:01:58.213 19758-19758/com.lb.secdemo I/secDemo: serviceA onBind
08-09 11:02:01.414 19758-19758/com.lb.secdemo I/secDemo: startService
08-09 11:02:01.433 19758-19758/com.lb.secdemo I/secDemo: serviceA onStartCommand
08-09 11:02:15.702 19758-19758/com.lb.secdemo I/secDemo: unbindService
08-09 11:02:15.708 19758-19758/com.lb.secdemo I/secDemo: serviceA onUnbind
08-09 11:02:23.204 19758-19758/com.lb.secdemo I/secDemo: stopService
08-09 11:02:23.216 19758-19758/com.lb.secdemo I/secDemo: serviceA onDestroy
##總結
無論啟動和停止service的先後順序如何,如果有startService和bindService混用的情況下,隻有當service的兩個引用關系都被釋放後(stopService和unbindService都被調用),service的生命周期才會結束。