Android學習筆記九 Service

2021-09-07 14:48:57 字數 3328 閱讀 1571

一:service是什麼

二:service的生命週期方法

在定義service子類時,需要重寫以下方法:

內部自動呼叫的方法

作用oncreat()

建立服務

onstartcommand()

開始服務

ondestroy()

銷毀服務

onbind()

繫結服務

onunbind()

解綁服務

在其他地方,建立服務、啟動服務、停止服務時,需要呼叫以下方法:

startservice()

啟動服務

stopservice()

關閉服務

bindservice()

繫結服務

unbindservice()

解綁服務

1:呼叫startservice()後,自動呼叫service內部方法:oncreate()、onstartcommand()

2:呼叫stopservice()後,自動呼叫內部方法:ondestory()

3:呼叫bindservice()後,自動呼叫內部方法:oncreate()、onbind()

4:呼叫unbindservice()後,自動呼叫內部方法:oncreate()、onbind()、ondestory()

三:常見的生命週期呼叫

1:startservice()啟動服務、stopservice()停止服務:只能開啟和關閉service,無法操作service;若啟動服務後,無手動呼叫stopservice(),則程式退出後服務仍然存在

2:bindservice()繫結服務、unbindservice()解綁服務:service隨著呼叫者銷毀而停止。

3:使用startservice()啟動服務,再使用bindservice()繫結服務——使用unbindservice()解綁服務,再使用stopservice()停止服務:要先解綁,才能停止服務。

四:service的型別

【來自:

五:不同型別service的使用

步驟1:新建子類繼承service類,重寫父類的oncreate()、onstartcommand()、ondestroy()和onbind()方法

步驟2:在androidmanifest.xml裡註冊該service

步驟3:在activity的**中,建立用於啟動service的intent物件

步驟4:呼叫startservice(intent)啟動service、呼叫stopservice(intent)停止服務

androidmanifest裡service的常見屬性說明屬性說明備註

android:name

service的類名

android:label

service的名字

若不設定,預設為service類名

android:icon

service的圖示

android:permission

申明此service的許可權

有提供了該許可權的應用才能控制或連線此服務

android:process

表示該服務是否在另乙個程序中執行(遠端服務)

不設定預設為本地服務;remote則設定成遠端服務

android:enabled

系統預設啟動

true:service 將會預設被系統啟動;不設定則預設為false

android:exported

該服務是否能夠被其他應用程式所控制或連線

不設定預設此項為 false

2:遠端服務:與程式無關,系統級別的服務

遠端service與呼叫者不在同乙個程序裡(即遠端service是執行在另外乙個程序)

一般用在多個應用程式共享同乙個後台服務(遠端服務)的情況。

我們把service稱為伺服器端、需要與service通訊的程序稱為客戶端。

aidl:android inte***ce definition language,即android介面定義語言;用於讓某個service與多個應用程式元件之間進行跨程序通訊,從而可以實現多個應用程式共享同乙個service的功能。
具體使用參見:

3:前台服務

前台服務是指在手機的下拉通知欄保持顯示乙個通知。

前台service優先順序較高,不會由於系統記憶體不足而被**;後台service優先順序較低,當系統出現記憶體不足情況時,很有可能會被**。

前台服務不是一種特殊的服務型別,它只是在一般的後台服務的基礎上新增了幾個屬性,使其具有了前台顯示的介面而已。任何服務都可以通過以下方法成為前台服務:

在原有的service類對oncreate()方法中新增以下內容:

@override

public

void

oncreate()

4:可通訊服務

上面建立的服務,除了啟動、停止之外,並不能與activity進行互動,即:activity不能訪問服務中的其他方法。

要通過activity操作service的話,需要用到繫結服務。

1)新建子類繼承service類,並在其中新建乙個內部類繼承自binder類,在binder子類中定義activity需要呼叫的方法。

然後在service子類中建立binder子類例項,並在onbind()方法中return 這個例項。

2)在activity中,建立serviceconnection例項,並且重寫其onserviceconnected()方法,把連線傳遞過來的binder強制型別轉換為第一步中建立的binder。

3)在activity中,建立乙個binder例項,然後通過bindservice()方法,把serviceconnection例項作為引數傳遞進去,從而把建立的binder賦值為繫結成功後得到的service中的binder例項。

4)最後,通過binder呼叫其內部定義好的方法,從而實現activity與service的通訊。

各種服務型別的使用場景:

六:service與thread的區別

一般來說,會將service和thread聯合著用,即在service中再建立乙個子執行緒(工作執行緒)去處理耗時操作邏輯。

學習筆記(九)

字元處理只針對c n d t string型別,不做型別轉換,都按照c型別處理,也可以處理這些型別構成的結構體,有專門的字串比較 定位操作 concatenate first name last name into first name separated by separate.write fir...

Android學習筆記

android系列 第一期 第一課 android初步認識 今天我們來初步了解一下安卓吧。首先,說到android,大家都非常熟悉了,相信都用過android手機吧,android給我們的第一印象應該是它的logo 乙個小機械人,如下圖1所示。圖1 android logo 嗯,好,認識了andro...

Android學習筆記

1 android四大天王 1 activity 介面元件,使用者介面,整個應用程式的門面 2 intent 用於應用之間傳輸資料 3 service 承擔資料處理的工作 4 content provider 為應用提供資料 android檔案目錄 1 assets 2 res drawable 放...