【Android的從零單排開發日記】之入門篇(五)——Android四大組件之Service,android四大
這幾天忙著駕校考試,連電腦都碰不到了,今天總算告一段落了~~
Service作為Android的服務元件,默默地在後台為整個程式服務,輔助應用與系統中的其他組件或系統服務進行溝通。它跟Activity的層級差不多,但不能自己運行只能後台運行。service可以在很多場合的應用中使用,比如播放多媒體的時候使用者啟動了其他Activity這個時候程式要在後台繼續播放,比如檢測SD卡上檔案的變化,再或者在後台記錄你地理資訊位置的改變等等, 總之服務總是藏在背景。
ps:Service運行在主線程中的,所以用它做耗時工作時,同樣會阻塞進程,所以最好是在service裡開個子線程。一、註冊Service
service的註冊跟activity的註冊類似,同樣是要在AndroidManifest.xml的檔案裡註冊。
<service android:name=".MinaService"><!-- 你自訂的service檔案 (在<application></application>裡面加)--> <intent-filter> <action android:name="com.MinaService" /><!-- 用intent啟動時的快捷名(也可以用常規的方式啟動) --> <category android:name="android.intent.category.default" /> </intent-filter> </service>
二、Service的兩種模式
service有兩種模式,本地服務和遠程服務。我們一般開發應用都是用的本地服務,而遠程服務經常在做系統開發時被用到。所以今天我會主要講本地的服務,遠程服務放著以後再講吧(其實UP主也沒用過遠程服務就是了==)
| 類別 |
區別 |
優點 |
缺點 |
應用 |
| 本地服務(Local) |
該服務依附在主進程上, |
服務依附在主進程上而不是獨立的進程,這樣在一定程度上節約了資源,另外Local服務因為是在同一進程因此不需要IPC,也不需要AIDL。相應bindService會方便很多。 |
主進程被Kill後,服務便會終止。 |
非常常見的應用如:HTC的音樂播放服務,天天動聽音樂播放服務。 |
| 遠程服務(Remote) |
該服務是獨立的進程, |
服務為獨立的進程,對應進程名格式為所在包名加上你指定的android:process字串。由於是獨立的進程,因此在Activity所在進程被Kill的時候,該服務依然在運行,不受其他進程影響,有利於為多個進程提供服務具有較高的靈活性。 |
該服務是獨立的進程,會佔用一定資源,並且使用AIDL進行IPC稍微麻煩一點。 |
一些提供系統服務的Service,這種Service是常駐的。 |
三、Service的生命週期及兩種啟動方式
service的生命週期比activity簡單多了,原因是service是在後台啟動並執行,它是一直啟動並執行,所以不需要那麼多的狀態判斷。它只繼承了onCreate()、onStart()或者說是onStartCommand()、
// 2.0 API level之後,實現onStart等同於重寫onStartCommand並返回 關於onStartCommon()的詳解:http://blog.csdn.net/lizzy115/article/details/7001731
onDestroy()三個方法。
服務不能自己運行,需要通過調用Context.startService()或Context.bindService()方法啟動服務。這兩個方法都可以啟動Service,但是它們的使用場合有所不同。
四、Service執行個體
接下來我會寫一個關於service的執行個體demo,希望看了之後會對大家有所協助。
五、結語
Service不僅可以與前端介面組件建立雙向串連、提供資料和功能支援,也可以單向接受Intent對象的請求,進行資料的分析處理和功能調度。在不同的使用方式下,Service服務元件扮演的角色和開發模式完全不同。這種設計,也為理解Service帶來了一定的難度。所以理解和習慣Service的使用顯得非常重要。 參考文章:(1)Android Service學習之本地服務 http://android.blog.51cto.com/268543/527314/DEMO下載(百度網盤)(到期的請CALL我) 作者:cpacm連絡方式:QQ 348515494(請註明部落格園)
出處:(http://www.cnblogs.com/cpacm/p/3912578.html)
著作權聲明:本文的著作權歸作者與部落格園共有。歡迎轉載閱讀,轉載時須註明本文的詳細連結。