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