星期二, 9月 13, 2011

Service(二)

Android應用程式學習筆記

Service(二)

Service的基本
實現service組件,必須產生一個service的子類,在實作上,必須複寫一些回呼方法來處理service組件的生命週期以及提供給其他組件綁定的機制。你應該複寫的最重要方法有:
onStartCommant()
當其他組件(比如activity)藉著呼叫startService()方法請求啟動service時,系統會呼叫此方法。一旦此方法執行,serrvice就啟動了且無限地在後台運行。如果你實現onStartCommand(),當service完成他的工作後,停止service就會是你的責任,你可以呼叫stopSelf()或者stopService()來停止service。如果你只想提供綁定形式的service組件,你無須實現此方法。

onBind()
當其他組件藉著呼叫bindService()方法綁定service組件,系統會呼叫此方法。實現此方法,你必須回傳IBinder來提供一個介面給客戶端,讓客戶端能與service通訊。你必須始終貫徹此方法,但是如果你不'想允許綁定,你應該回傳null。

onCreate()
當service組件第一次產生時,系統會呼叫此方法,執行一次性地安裝程序(在它呼叫onStartCommand()或者onBind()之前)。如果service已在運行,系統便不會喝叫此方法。

onDestroy()
當service組件已不再使用或者必須銷毀時,系統便會呼叫此方法。你的service必須執行此方法來清除任何資源,比如執行續、註冊監聽器、接收器等。這也是service最後接收的呼叫。


如果一個組件呼叫startService()來啟動service(這種方式系統會呼叫onStartCommand()),service會保持運行直到自己呼叫stopSelf()才停止或者其他的組件呼叫stopService()來停止service。

如果一個組件呼叫bindService()去產生一個service(不會呼叫onStartCommand()),service只會運行的和綁定它的組件一樣長,一旦所有客戶端都不再綁定service,系統就會銷毀它。

Android系統唯有在記憶體不足以及必須為使用者正在使用的activity恢復資源才會強制銷毀service,如果service被使用者正在使用的activity給綁定,它是不太可能被銷毀的,然而如果service是宣告為運行在前台的,它不可能被銷毀,否則,如果一個service啟動以運行長時間了,隨時間推移,系統會將它在後台任務的位置下降,它就有更高的被銷毀的機會。

沒有留言:

張貼留言