深入淺出 Android核心組件Service(3)
前兩節(jié)中可以看到Activity和Service,context.startService對應(yīng)著Service中的onStart()方法,context.onBindService對應(yīng)的是Service中的onBind()方法。當(dāng)我們繼想綁定一個(gè)Service又想在 Activity停止時(shí),Service不會停止,我們可以先StartService,然后再BindService()。這時(shí)候的流程圖如下所示:

點(diǎn)擊查看大圖
此時(shí)需要注意一個(gè)問題,當(dāng)Activity退出的時(shí)候,Sercvice并不會停止,此時(shí)我們可以再進(jìn)入Activity重新綁定,當(dāng)這時(shí)候 Service就會調(diào)用onRebind()方法,但是調(diào)用onRebind()方法的前提是先前的onUnbind()方法執(zhí)行成功,但是使用 super.onUnbind(intent)是執(zhí)行不成功的,這時(shí)候我們要手動的使其返回true,再次綁定時(shí)Rebind()就會執(zhí)行。否則,如果退出時(shí)不顯示的指定onUnbind()為成功的話(為false),那么重新啟動此Activity來綁定服務(wù)時(shí),Service的onBind()方法和onReBind都不會執(zhí)行,但是ServiceConnection方法確一定會回調(diào)了。這說明在Service中的onBind()方法不同于 onStart()方法不能被重復(fù)調(diào)用。
本節(jié)代碼和上節(jié)代碼大致相同,只不過是在bind之前先start service ,大家可以在DDMS中看onUnbind() onRebind()的調(diào)用情況。本節(jié)代碼在此下載:http://down.51cto.com/data/326376