《Android程序設計教程》課件第六章 Service服務_第1頁
《Android程序設計教程》課件第六章 Service服務_第2頁
《Android程序設計教程》課件第六章 Service服務_第3頁
《Android程序設計教程》課件第六章 Service服務_第4頁
《Android程序設計教程》課件第六章 Service服務_第5頁
已閱讀5頁,還剩15頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第6章Service服務目錄6.1Service簡介6.1.1Service分類6.1.2Service基本示例6.2Service詳解6.2.1Start方式啟動Service6.2.2Bind方式啟動Service 6.2.3混合方式啟動Service 6.2.4前臺Service6.2.5Service執行耗時任務 6.2.6遠程Service學習目標了解Service分類掌握Service的創建、配置和編寫掌握Service生命周期掌握Service組件的通信6.1Service簡介Service組件表示一種服務,專門用于執行一些持續的、耗時長的并且無須與用戶界面交互的操作。Service的運行時不可見的,通常用于執行一些無須用戶交互,并需要持續運行的任務Service擁有獨立的生命周期,其啟動、停止以及運行的控制可以由其他組件完成一個處于運行狀態的Service擁有的優先級要比暫停和停止狀態的Activity級別更高如果在Service中需要執行耗時操作,必須新開線程運行,否則會阻塞主線程,從而造成界面卡頓現象6.1.1Service分類按照運行的形式和使用方式的不同,可以對Service進行分類:(1)按照運行的進程不同,可以將Service分為本地(Local)Service和遠程(Remote)Service。(2)按照運行的形式分為前臺Service和后臺Service。(3)按照使用Service的方式可以分為啟動(Start)方式Service、綁定(Bind)方式Service和混合方式Service。6.1.2Service基本示例創建一個Service組件只需要兩步,而啟動Service可以使用Start和Bind兩種方式。創建Service的步驟如下:(1)通過繼承Service的方式來定義一個Service的子類;(2)在應用程序的AndroidManifest.xml中配置Service組件。6.2Service詳解6.2.1Start方式啟動ServiceStart方式通過調用Context.startService()方法來啟動Service。Service將自行管理生命周期,并會一直運行下去,直到Service調用自身的stopSelf()方法或其他組件調用該Service的stopService()方法時為止。一個組件通過startService()方法啟動Service后,該組件與Service之間并沒有關聯,即使組件被銷毀,也并不影響Service的運行關于onStartCommand()方法的語法格式如下所示:publicintonStartCommand(Intentintent,intflags,intstartId)其中:參數intent是在啟動Service時所傳入的Intent對象。參數flags取值范圍為0、Service.START_FLAG_REDELIVERY和Service.START_FLAG_RETRY。startID表示啟動請求的ID,用于唯一標識一次啟動請求,在調用stopSelfResult()方法停止Service時,可以傳入特定的startId,用于對停止Service操作的附加條件onStartCommand()方法的返回值有Service.START_NOT_STICKY、Service.START_STICKY和Service.START_REDELIVER_INTENT三種情況。6.2.2Bind方式啟動Service通過調用Context的bindService()方法也可以啟動Service。使用Bind方式啟動的Service會和啟動它的組件關聯在一起,并可以進行通信,組件可以通過unbindService()方法來解除綁定。bindService()方法的語法結構如下所示:publicbooleanbindService(Intentservice,ServiceConnectionconn,intflags)bindService()方法用于綁定Service,其返回值代表是否綁定成功,其參數如下:(1)參數service,在綁定Service時所傳入的Intent對象。(2)參數conn,這是一個ServiceConnection接口類型的對象,在綁定或解除綁定時,系統會調用ServiceConnection接口中對應的回調方法(3)參數flags,用于決定Service的一些行為規則,常用的取值有0、BIND_AUTO_CREATE、BIND_NOT_FOREGROUND、BIND_WAIVE_PRIORITY、BIND_IMPORTANT、BIND_ABOVE_CLIENT和BIND_ADJUST_WITH_ACTIVITY。6.2.3混合方式啟動Service6.2.4前臺ServiceService啟動后,其所在的進程默認是服務進程,優先級并不高,如果該進程非常重要,可以通過Service的startForeground()方法將其改為前臺進程。調用startForeground()方法后,Service運行時會在通知欄顯示一個通知(Notification),Service停止后通知會消失。startForeground()方法聲明格式如下:publicfinalvoidstartForeground(intid,Notificationnotification)其中:參數id是通知的id;參數notification需要顯示的通知。當Service成為前臺進程后,需要恢復原有的優先級可以調用stopForeground()方法取消其前臺狀態,從而允許系統在內存不足時更容易終止這個Service。stopForeground()方法聲明格式如下:publicfinalvoidstopForeground(intflags)stopForeground()方法只有一個參數,當降低Service的前臺優先級時,指用該參數指定是否移除startForeground()方法所創建的通知。6.2.5Service執行耗時任務Service運行于UI線程中,如果直接在UI線程中執行耗時或可能被阻塞的任務,會造成界面無響應異常,因此這種耗時任務通常都需要新開線程執行。針對在Service中執行耗時任務,Android系統還專門提供了一種特殊的Service:IntentService。抽象類android.add.IntentService是Service的子類,其內部會自動開始一個新線程來執行任務,并在任務執行完畢后停止Service。當有多個任務時,IntentService會將任務加到一個隊列中,按照次序依次執行,直到所有任務執行完畢后停止Service。使用IntentService非常簡單,只需繼承IntentService并重寫onHandleIntent()方法即可,onHandleIntent()方法的語法格式如下所示:protectedabstractvoidonHandleIntent(Intentintent);其中,參數intent是Service客戶端以Start方式啟動Service時startService()方法所傳入的intent對象。6.2.6遠程ServiceAndroid系統提供了遠程Service,即允許被另一個進程中的組件訪問的Service。為使遠程Service能被其他進程訪問,需要一種進

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論