安卓四大组件之Service
很多情況下,一些與用戶很少需要產(chǎn)生交互的應(yīng)用程序,我們一般讓他們?cè)诤笈_(tái)運(yùn)行就行了,而且在他們運(yùn)行期間我們?nèi)匀荒苓\(yùn)用其他的應(yīng)用。為了處理這種后臺(tái)進(jìn)程,Android引進(jìn)了service的概念。
?服務(wù)的特點(diǎn):service在Android中是一種長(zhǎng)生命周期的組件,它不實(shí)現(xiàn)任何用戶界面,是一個(gè)沒有界面的組件,由其他組件開啟。service長(zhǎng)期在后臺(tái)運(yùn)行,執(zhí)行不關(guān)乎界面的一些操作比如:新聞客戶端每隔一段時(shí)間去查看是否有最新的新聞。監(jiān)聽電話來點(diǎn)顯示。service和其他組件一樣,都是運(yùn)行在主線程中,因此不能用它來做耗時(shí)操作。
Android中的進(jìn)程種類:
Android進(jìn)程的回收機(jī)制:
它會(huì)根據(jù)優(yōu)先級(jí)進(jìn)行回收。系統(tǒng)會(huì)盡可能的維持程序的進(jìn)程,當(dāng)系統(tǒng)內(nèi)存不夠用時(shí),會(huì)把空進(jìn)程一個(gè)一個(gè)回收掉。當(dāng)回收完所有的空進(jìn)程時(shí)還不夠用時(shí),繼續(xù)向上回收后臺(tái)進(jìn)程,一次類推。但是當(dāng)回收服務(wù),可視,前臺(tái)著三種進(jìn)程時(shí),系統(tǒng)非必要情況下不會(huì)輕易回收,如果回收掉這三種進(jìn)程,那么在系統(tǒng)內(nèi)存夠用時(shí),會(huì)再給重新啟動(dòng)進(jìn)程。如果是用戶手動(dòng)關(guān)閉的服務(wù),就不會(huì)再重啟了。
Android為什么用服務(wù)而不是線程?
Android程序在第一次啟動(dòng)的時(shí)候會(huì)開啟一個(gè)進(jìn)程給這個(gè)程序來使用。Android一個(gè)應(yīng)用的程序把所有的界面關(guān)閉時(shí),進(jìn)程還沒有被銷毀,現(xiàn)在處于的是空進(jìn)程狀態(tài),而thread運(yùn)行在空進(jìn)程中很容易被銷毀。服務(wù)不容易被銷毀,如果非法狀態(tài)下被銷毀了,系統(tǒng)會(huì)在內(nèi)存夠用時(shí)重新啟動(dòng)。
Android中如何使用service
?創(chuàng)建Service,定義類繼承service,Androidmanifest.xml中定義《service》
?開啟Service,在其他組件中調(diào)用startService方法
?startService在activity中直接調(diào)用,會(huì)執(zhí)行onstartCommand,oncreate只會(huì)執(zhí)行一次,服務(wù)一旦被創(chuàng)建出來,就不會(huì)再執(zhí)行oncreate方法,以后再去開啟服務(wù)只會(huì)執(zhí)行onStarCommend.
停止Service,調(diào)用stopService方法,會(huì)執(zhí)行ondestory()
注意:服務(wù)在執(zhí)行生命周期方法時(shí),也是一個(gè)前臺(tái)進(jìn)程。廣播接收者和它類似,在執(zhí)行生命周期方法onreceive時(shí),也是一個(gè)前臺(tái)進(jìn)程。
Service的生命周期
Service有兩種不同的啟動(dòng)開啟方式,一個(gè)是直接onstart,另一個(gè)是綁定服務(wù)。
? ? ? A:標(biāo)準(zhǔn)開啟模式,被開啟的Service通過其他組件調(diào)用startService被創(chuàng)建。這種服務(wù)可以無限的運(yùn)行下去,必須調(diào)用stopself方法或者其他組件調(diào)用stopService方法來停止它。當(dāng)Service被停止時(shí),系統(tǒng)會(huì)銷毀它。
? ? ?B:綁定模式,被綁定的Service當(dāng)其他組件調(diào)用bindService來創(chuàng)建的。客戶通過一個(gè)ibinder接口和Service進(jìn)行通信。客戶可以通過unbindservive方法來關(guān)閉這種連接。一個(gè)Service可以同時(shí)和多個(gè)客戶綁定,當(dāng)多個(gè)客戶都解除綁定之后,系統(tǒng)會(huì)銷毀Service。
? 注意一點(diǎn)Service的這兩種生命周期并不是完全分開的。也就是說你可以和一個(gè)已經(jīng)調(diào)用了startservice的服務(wù)來進(jìn)行綁定。
兩者的區(qū)別:1,通過start直接啟動(dòng)服務(wù),一旦服務(wù)開啟,就與調(diào)用者沒有任何關(guān)系,調(diào)用者的activity即使退出,也不會(huì)影響后臺(tái)服務(wù)運(yùn)行。而綁定服務(wù)的activity退出了,那么他綁定的服務(wù)也就跟著退出。綁定服務(wù)的activity退出時(shí)重寫activity的Ondestory方法,方法內(nèi)部調(diào)用unbindService,去解除服務(wù)的綁定。
? 2,start直接啟動(dòng)服務(wù)的方法,調(diào)用者不能調(diào)用服務(wù)內(nèi)部的方法。綁定服務(wù)啟動(dòng)時(shí),可以利用Serviceconnection接口獲取服務(wù)的ibinder對(duì)象,通過這個(gè)對(duì)象可以實(shí)現(xiàn)自定義的接口。
總結(jié)
以上是生活随笔為你收集整理的安卓四大组件之Service的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JAVa面向对象--反射
- 下一篇: 安卓中一些细节问题