Android學習筆記15—Services(1)


Service是一種運行在后台進行長時間工作的應用程序組件,並且它沒有任何用戶界面。另一個應用程序組件能開啟一個Service,並且它會繼續運行在后台即使用戶轉換到另一個應用程序。另外要說的是,一個應用程序組件能夠綁定一個Service並且和它進行交互,甚至進行進程間的通信。例如,一個Service可能在后台操作網絡事務,播放音樂,進行文件的I/O操作,和一個Content Provider進行交互等后台事務。

一個Service可以進行兩種操作:StartedBound

Started:當一個應用程序組件調用startService()方法啟動這個service,那么這個Service就開啟了。一旦這個Service開啟,那么這個Service就會就會立即運行在后台,即使這個組件被銷毀掉。通常情況下,一個被開啟的Service表現的是一個單獨的操作並且不會給調用者返回一個結果。

Bound:當一個應用程序組件調用bindService()方法綁定一個Service時,那么這個Service就被綁定了。一個Bound Service提供了一套客戶端——服務器接口,這個接口允許組件和這個Service進行通信、發送請求、獲取結果、甚至用進程間通信(IPC)進行跨進程操作。一個Bind Service和綁定它的其他組件具有相同的存活時間,也就是說當一次性有多個組件綁定這個Service的時候,只有當所有組件與這個Service解綁的時候這個Service才會被銷毀。

盡管以上講述了這兩種方式的區別,但是一個Service這兩種方式都可以使用,只是在我們定義一個Service的時候,是否實現onStartCommand()或者onBind()方法的問題。

然而,不論你的應用程序的Service是被started或者被bind,甚至是這兩種都有的,任何應用程序組件都能通過Intent對象使用你的Service(甚至是不同的應用程序)。但是我們也可以在Manifest文件中定義我們的Service的私有化(android:exported =
false),
不允許其他應用程序的組件訪問我們的Service。

如何定義一個Service?

為了創建一個Service,我們首先需要定義一個Service的子類,這個子類需要實現Service幾個回調方法,以下是最重要的幾種需要實現的回調函數:

onStartCommand():當另一個應用程序組件通過startService方法請求這個Service被開啟的時候,系統調用這個方法。一旦這個方法被執行的時候,這個Service就會被開啟並且立即在后台運行。如果你實現這個方法的時候,當這個Service完成它的任務的時候,你必須調用stopSelf()和stopService()方法來停止這個Service。(如果我們想要使用bind,我們不需要實現這個方法。)

onBind():當兩一個應用程序組件想要通過bindService()綁定這個Service的時候,系統調用這個方法。在這個方法的實現中,你必須提供一個客戶端用來和這個Service通信的接口,這個接口返回一個IBinder。你必須總是實現這個方法,但是如果我們不允許這個Service被綁定,我們應該返回null。

onCreate():當這個Service第一次被調用的時候系統調用這個方法,在這個方法之后系統調用onStartCommond或者onBind。如果這個Service方法是運行狀態,那么這個方法不被調用。

onDestroy():當一個Service不再被用並且要被銷毀的時候調用這個方法。你的應用程序應該實現這個方法去回收資源,例如線程、注冊的監聽器、reciever等,這個方法這個Service調用的最后一個方法。


如果一個組件調用startService方法啟動一個Service,那么將會調用這個service的onStartCommond方法,這個service會一直運行着,直到這個service自己調用stopself方法或者另一個組件調用stopService方法停止它。

Android系統僅僅在低內存的情況下才會強制停止service,它必須為獲取到用戶焦點的Activity回收資源。但是如果一個Service綁定到一個已經獲取到焦點的Activity,那么它將要不太可能被殺死,並且如果一個Service被定義運行在前台,那么它將要從不會被殺死。然而,如果一個Service被啟動並且長時間工作,那么系統將會降低他在后台任務列表中的位置,並且這個Service就會變得更加可能被殺死。


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com