Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Service-Android四大組件之一

Service-Android四大組件之一

編輯:關於Android編程

1.Service是什麼
Service是Android的四大組件之一,即Android系統的服務(不是一個線程,是主程序的一部分),與Activity不同,它是不能與用戶交互的,不能自己啟動的,需要調用Context.startService()來啟動,運行後台,如果我們退出應用時,Service進程並沒有結束,它仍然在後台行。比如我們播放音樂的時候,有可能想邊聽音樂邊干些其他事情,當我們退出播放音樂的應用,如果不用Service,我們就聽不到歌了,所以這時候就得用到Service了。

2.Service生命周期
①onCreate() 創建Service
②onStart(Intent intent, int startId) 啟動Service
③onDestroy() 銷毀Service
④onBind() 返回一個IBinder接口對象給Service
 
3.啟動和停止Service
①啟動:startService(Intent intent)來啟動Service,這時Service會調用自身的onCreate()方法(該Service未創建),接著調用onStart()方法。
②停止:stopService(Intent intent)來停止Service,這時Service會調用自身的onDestory()方法。

4.綁定Service
調用bindService(Intent service, ServiceConnection conn, int flags)來綁定一個Service,這時Service會調用自身的onCreate()方法(該Service未創建),接著調用onBind()方法返回客戶端一個IBinder接口對象。(注意:如果返回null,ServiceConnection對象的方法將不會被調用)
參數①service:Intent對象 。
參數②conn:ServiceConnection對象,實現其onServiceConnected()和onServiceDisconnected()在連接成功和斷開連接時處理。
參數③flags:Service創建的方式,一般用Service.BIND_AUTO_CREATE表示綁定時自動創建
在注冊服務的時候,為了將service納入編譯系統,必須在AndroidMainfest.xml中對Service進行顯式聲明。
2.計算量較大的又不是UI層的工作的話,可以選擇放置在Service中進行工作。
3.通過開發文檔你會發現,Android中的Service與宿主(調用者)在同一線程,而不是專門起一條線程,這意味著,如果你的服務要CPU密集型操作(如:MP3播放)或則阻塞操作(如網絡)時,必須產生它自己的線程來完成這個工作,否則會造成線程阻塞。在Service的子類裡面,IntentService類服務可以作為一個標准的實施,它的工作有其自己的線程。
4.如果在使用Service的時候又使用了廣播接收器配合工作,廣播如果是動態注冊的話,在服務停止的時候記得調用unregisterReceiver(receiver);這個方法來注銷掉接收器
1)Context.startService():Service會經歷onCreate -> onStart(如果Service還沒有運行,則android先調用onCreate()然後調用onStart();如果Service已經運行,則只調用onStart(),所以一個Service的onStart方法可能會重復調用多次);
stopService的時候直接onDestroy,如果是調用者自己直接退出而沒有調用stopService的話,Service會一直在後台運行。該Service的調用者再啟動起來後可以通過stopService關閉Service。 注意,多次調用Context.startservice()不會嵌套(即使會有相應的onStart()方法被調用),所以無論同一個服務被啟動了多少次,一旦調用Context.stopService()或者stopSelf(),他都會被停止。補充說明:傳遞給startService()的Intent對象會傳遞給onStart()方法。調用順序為:onCreate --> onStart(可多次調用) --> onDestroy。
(2)Context.bindService():Service會經歷onCreate() -> onBind(),onBind將返回給客戶端一個IBind接口實例,IBind允許客戶端回調服務的方法,比如得到Service運行的狀態或其他操作。這個時候把調用者(Context,例如Activity)會和Service綁定在一起,Context退出了,Srevice就會調用onUnbind -> onDestroyed相應退出,所謂綁定在一起就共存亡了。
補充說明:傳遞給bindService()的Intent對象會傳遞給onBind(),傳遞給unbindService()的Intent對象會傳遞給onUnbind()方法。調用順序為:onCreate --> onBind(只一次,不可多次綁定) --> onUnbind --> onDestory。
(3)注意事項:在Service每一次的開啟關閉過程中,只有onStart可被多次調用(通過多次startService調用),其他onCreate,onBind,onUnbind,onDestory在一個生命周期中只能被調用一次。還有一點,目前我沒有遇到過需要startService和bindService交互使用的情況(我認為不會有這種需求),所以不必去考慮交互的問題,待遇到時再考慮不遲。
(4)BroadcastReceiver只能通過startService啟動Service,因為廣播本身生命周期很短,bind的話沒有意義












  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved