Android應用開發入門實戰關於Service

2022-12-11 01:21:03 字數 3241 閱讀 5173

service是不定時間執行在後台的一段**。是android 系統中的一種元件,它跟activity的級別差不多,但是它不能自己執行,需要通過某乙個activity或者其他context物件來呼叫,只能後台執行。它可以執行在它自己的程序,也可以執行在其他應用程式程序的上下文(context)裡面。

其它的元件可以繫結到乙個服務(service)上面,通過遠端過程呼叫(rpc)來呼叫這個方法。例如****器的服務,當使用者退出**選擇使用者介面,仍然希望**依然可以繼續**,這時就是由服務 (service)來保證當使用者介面關閉時**繼續**的。

service可以在和多場合的應用中使用,比如**多**的時候使用者啟動了其他activity這個時候程式要在後台繼續**,比如檢測sd卡上檔案的變化,再或者在後台記錄你地理資訊位置的改變等等,總之服務嘛,總是藏在後頭的。

每個service必須在manifest中通過來宣告。service的啟動 和 兩種方式。兩種啟動service的方式有所不同。

,最好在service裡啟動乙個子執行緒來完成,因為service和其他的應用元件一樣,是跑在主線程中,會影響到你的ui操作或者阻塞主線程中的其他事情。

1、本地服務 (local servic)。用於應用程式內部,通過呼叫啟動,呼叫結束,startservice()可以傳遞引數給service。

使用 啟動service會經歷:

->oncreate()- >onstart()->service running

| ->ondestroy() ->service stop

如果service還沒有執行,則android先呼叫oncreate()然後呼叫onstart();如果service已經執行,則只呼叫onstart(),所以乙個service的onstart方法可能會重複呼叫多次。 也就是說多次呼叫startservice()方法並不會導致多次建立服務,但會導致多次呼叫onstart()方法。

stopservice的時候直接ondestroy,如果是呼叫者自己直接退出而沒有呼叫stopservice的話,service會一直在後台執行。該service的呼叫者再啟動起來後可以通過stopservice關閉service。

所以呼叫startservice的生命週期為:oncreate --> onstart(可多次呼叫) --> ondestroy

此方式主要用於實現應用程式自己的一些耗時任務,比如查詢公升級資訊,並不占用應用程式比如activity所屬執行緒,而是單開執行緒後台執行,這樣使用者體驗比較好。

2、遠端服務(remote service)。用於android開發系統內部的應用程式之間。它可以通過自己定義並暴露出來的介面進行程式操作。

客戶端建立乙個到服務物件的連線,並通過那個連線來呼叫服務。連線以通過呼叫啟動,呼叫結束。多個客戶端可以繫結至同乙個服務。

這種方式,可被其他應用程式復用,比如天氣預報服務,其他應用程式不需要再寫這樣的服務,呼叫已有的即可。

使用啟動service會經歷:

>oncreate()->onbind()->service running

onunbind() -> ondestroy() ->service stop

onbind將返回給客戶端乙個ibind介面例項,ibind允許客戶端**srevice的方法,比如得到service執行的狀態或其他操作。這個時候把呼叫者(context,例如activity)會和service繫結在一起,context退出了,srevice就會呼叫onunbind->ondestroy相應退出。

所以呼叫bindservice的生命週期為:oncreate --> onbind(只一次,不可多次繫結) --> onunbind --> ondestory。

以上兩種方法都可以啟動service,但是它們的使用場合有所不同。

使用startservice()方法啟用服務,呼叫者與服務之間沒有關聯,即使呼叫者退出了,服務仍然執行。

使用bindservice()方法啟用服務,呼叫者與服務繫結在了一起,呼叫者一旦退出,服務也就終止,大有「不求同時生,必須同時死」的特點。

onbind()只有採用方法啟動服務時才會**該方法。該方法在呼叫者與服務繫結時被呼叫,當呼叫者與服務已經繫結,多次呼叫方法並不會導致該方法被多次呼叫。

兩種方式可以混合使用,比如說可以先startservice再bindservice。

在service每一次的開啟關閉過程中,只有onstart可被多次呼叫(通過多次startservice呼叫),其他oncreate,onbind,onunbind,ondestory在乙個生命週期中只能被呼叫一次。

3、service的生命週期。並不像activity那麼複雜,它只繼承了oncreate(),onstart(),ondestroy()三個方法,當我們第一次啟動service時,先後呼叫了oncreate(),onstart()這兩個方法,當停止service時,則執行ondestroy()方法,這裡需要注意的是,如果service已經啟動了,當我們再次啟動service時,不會在執行oncreate()方法,而是直接執行onstart()方法。

startservice後,即使呼叫startservice的程序結束了,service仍然還存在,直到有程序呼叫stopservice,或者service自己自殺(或者

bindservice後,service就和呼叫bindservice的程序同生共死了,也就是說當呼叫bindservice的程序死了,那麼它bind的service也要跟著被結束,當然期間也可以呼叫unbindservice讓 service結束。

兩種方式混合使用時,比如說你startservice了,我bindservice了,那麼只有你stopservice了而且也unbindservice了,這個service才會被結束。

4、擁有service的程序具有較高的優先順序。android系統將會盡量嘗試保留那些啟動了的或者是繫結了service的程序。

如果該服務正在程序的oncreate(), onstart(), 或者 ondestroy() 這些方法中執行時, 那麼主程序將會成為乙個前台程序,以確保此**不會被停止。

如果服務已經開始,那麼它的主程序會就重要性而言低於所有可見的程序但高於不可見的程序, 由於只有少數幾個程序是使用者可見的,所以只要不是記憶體特別低,該服務不會停止.。

如果有多個客戶端繫結了服務, 只要客戶端中的乙個對於使用者是可見的,即認為該服務可見。

如果service可以使用startforeground(int, notification)方法來將service設定為前台狀態,那麼系統就認為是對使用者可見的,並不會在記憶體不足時killed。

如果有其他的應用元件作為service,activity等執行在相同的程序中,那麼將會增加該程序的重要性。

android介面開發顏色

介面開發推薦顏色 ffffff fffff0 ffffe0 ffff00 fffafa fffaf0 fffacd fff8dc fff5ee fff0f5 ffefd5 ffebcd ffe4e1 ffe4c4 ffe4b5 ffdead ffdab9 ffd700 ffc0cb ffb6c1 f...

Android開發實習報告格式

中國xx大學 畢業實習總結報告 院系名稱 x學院 專業 xx 學生姓名docer 學號123456789 指導老師docer x大學教務處制 2018年3月1日 備註 1.實習種類 專業實習 畢業實習 課程實習。畢業實習 設計任務書 指導教師簽名年月日 關於在 進行畢業實習的總結 一 實習目的及意義...

Android開發環境搭建 基於Windows

android開發環境搭建 基於windows作業系統 一 準備工具 android環境搭建需要的工具為 jdk eclipse adt。二 jdk的安裝和j a環境變數的設定 a jdk 位址 jdk j a decelopment kit 是整個j a的核心,包括一系列j a開發的東西,安裝完j...