Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android系統教程 >> Android開發教程 >> Android Service服務(三) bindService與remoteService

Android Service服務(三) bindService與remoteService

編輯:Android開發教程

一、bindService簡介

bindService是綁定Service服務,執行service服務中的邏輯流程。

service通過 Context.startService()方法開始,通過Context.stopService()方法停止;也可以通過Service.stopSelf()方法或者 Service.stopSelfResult()方法來停止自己。只要調用一次stopService()方法便可以停止服務,無論之前它被調用了多少次的 啟動服務方法。

客戶端建立一個與Service的連接,並使用此連接與Service進行通話,通過Context.bindService()方法 來綁定服務,Context.unbindService()方法來關閉服務。多個客戶端可以綁定同一個服務,如果Service還未被啟動, bindService()方法可以啟動服務。

上面startService()和bindService()兩種模式是完全獨立的。你可以綁定一個已經 通過startService()方法啟動的服務。例如:一個後台播放音樂服務可以通過startService(intend)對象來播放音樂。可能用戶 在播放過程中要執行一些操作比如獲取歌曲的一些信息,此時activity可以通過調用bindServices()方法與Service建立連接。 這種情況下,stopServices()方法實際上不會停止服務,直到最後一次綁定關閉。

二、bindService啟動流程

context.bindService()  ——> onCreate()  ——> onBind()  ——> Service running  ——> onUnbind()  ——> onDestroy()  ——> Service stop

onBind()將返回給客戶端一 個IBind接口實例,IBind允許客戶端回調服務的方法,比如得到Service的實例、運行狀態或其他操作。這個時候把調用者 (Context,例如Activity)會和Service綁定在一起,Context退出了,Srevice就會調用onUnbind->onDestroy相應退出。

所以調用bindService的生命周期為:onCreate --> onBind(只一次,不可多次綁定) --> onUnbind --> onDestory。

在Service每一次的開啟關閉過程中,只有onStart可被多次調用(通過多次startService調用),其他 onCreate,onBind,onUnbind,onDestory在一個生命周期中只能被調用一次。詳見:Android Service 服務(一)—— Service

三、bindService生命周期

像一個activity那樣,一個service有些可以用來改變狀態的生命周期方法, 但是比activity的方法少,service生命周期方法只有三個public

void onCreate()

void onStart(Intent intent)

void onDestroy()

通過實現這三個生命周期方法,你可以監聽service的兩個嵌套循環的生命周期:

1、整個生命周期

service的整個生命周期是在onCreate()和onDestroy()方法之間。和activity一樣,在 onCreate()方法裡初始化,在onDestroy()方法裡釋放資源。例如,一個背景音樂播放服務可以在onCreate()方法裡播放,在 onDestroy()方法裡停止。

2、活動的生命周期

service的活動生命周期是在onStart()之後,這個方法會處理通 過startServices()方法傳遞來的Intent對象。音樂service可以通過開打intent對象來找到要播放的音樂,然後開始後台播放。 注: service停止時沒有相應的回調方法,即沒有onStop()方法,只有onDestroy()銷毀方法。

onCreate()方法和 onDestroy()方法是針對所有的services,無論它們是否啟動,通過Context.startService()和Context.bindService()方法都可 以訪問執行。然而,只有通過startService()方法啟動service服務時才會調用onStart()方法。

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