3 回答

TA貢獻1848條經(jīng)驗 獲得超2個贊
啟動:
//首先注冊服務
<service
android:name="com.wangdeyu.service.MusicService"
android:exported="false" >
<intent-filter>
<action android:name="com.abc" />
</intent-filter>
</service>
//啟動服務
Intent service=new Intent(" com.abc");
startService(service);
//Service生命周期
?、賝nCreate() 創(chuàng)建Service
?、趏nStart(Intent intent, int startId) 啟動Service
?、踥nDestroy() 銷毀Service
//關(guān)閉服務
stopService(service);
Service的生命周期方法比Activity少一些,只有onCreate, onStart, onDestroy
我們有兩種方式啟動一個Service,他們對Service生命周期的影響是不一樣的。
1 通過startService,就是上面這種
Service會經(jīng)歷 onCreate --> onStart
stopService的時候直接onDestroy
如果是 調(diào)用者 直接退出而沒有調(diào)用stopService的話,Service會一直在后臺運行。
下次調(diào)用者再起來仍然可以stopService。
2 通過bindService
Service只會運行onCreate, 這個時候 調(diào)用者和Service綁定在一起
調(diào)用者退出了,Srevice就會調(diào)用onUnbind-->onDestroyed
所謂綁定在一起就共存亡了。
注意:Service的onCreate的方法只會被調(diào)用一次,
就是你無論多少次的startService又 bindService,Service只被創(chuàng)建一次。
如果先是bind了,那么start的時候就直接運行Service的onStart方法,
如果先是start,那么bind的時候就直接運行onBind方法。如果你先bind上了,就stop不掉了,
只能先UnbindService, 再StopService,所以是先start還是先bind行為是有區(qū)別的。
Android中的服務和windows中的服務是類似的東西,服務一般沒有用戶操作界面,它運行于系統(tǒng)中不容易被用戶發(fā)覺,可以使用它開發(fā)如監(jiān)控之類的程序。
服務不能自己運行,需要通過調(diào)用Context.startService()或Context.bindService()方法啟動服務。
這兩個方法都可以啟動Service,但是它們的使用場合有所不同。使用startService()方法啟用服務,調(diào)用者與服務之間沒有關(guān)連,
即使調(diào)用者退出了,服務仍然運行。使用bindService()方法啟用服務,調(diào)用者與服務綁定在了一起,調(diào)用者一旦退出,服務也就終止,大有“不求同時生,必須同時死”的特點。
如果打算采用Context.startService()方法啟動服務,在服務未被創(chuàng)建時,系統(tǒng)會先調(diào)用服務的onCreate()方法,
接著調(diào)用onStart()方法。如果調(diào)用startService()方法前服務已經(jīng)被創(chuàng)建,多次調(diào)用startService()方法并不會導致多次創(chuàng)建服務,
但會導致多次調(diào)用onStart()方法。采用startService()方法啟動的服務,只能調(diào)用Context.stopService()方法結(jié)束服務,服務結(jié)束時會調(diào)用onDestroy()方法。
如果打算采用Context.bindService()方法啟動服務,在服務未被創(chuàng)建時,系統(tǒng)會先調(diào)用服務的onCreate()方法,
接著調(diào)用onBind()方法。這個時候調(diào)用者和服務綁定在一起,調(diào)用者退出了,系統(tǒng)就會先調(diào)用服務的onUnbind()方法,
接著調(diào)用onDestroy()方法。如果調(diào)用bindService()方法前服務已經(jīng)被綁定,
多次調(diào)用bindService()方法并不會導致多次創(chuàng)建服務及綁定(也就是說onCreate()和onBind()方法并不會被多次調(diào)用)。
如果調(diào)用者希望與正在綁定的服務解除綁定,可以調(diào)用unbindService()方法,調(diào)用該方法也會導致系統(tǒng)調(diào)用服務的onUnbind()-->onDestroy()方法.

TA貢獻1998條經(jīng)驗 獲得超6個贊
Service服務,是安卓中的四大組件之一
簡單的說,服務可以再后臺運行,及時程序退出,也是可以運行的
定義一個類,繼承Service
復寫oncreate(服務第一次啟動就會調(diào)用),onstartCommand(每次調(diào)用startService都會調(diào)用)
啟動 startService
關(guān)閉 stopService
- 3 回答
- 0 關(guān)注
- 1185 瀏覽
添加回答
舉報