Android 四大组件 —— 服务
一、服務(wù)是什么
????????服務(wù)(Service)是Android?中實(shí)現(xiàn)程序后臺(tái)運(yùn)行的解決方案,它非常適合用于去執(zhí)行那些不需要和用戶(hù)交互而且還要求長(zhǎng)期運(yùn)行的任務(wù)。服務(wù)的運(yùn)行不依賴(lài)于任何用戶(hù)界面,即使當(dāng)程序被切換到后臺(tái),或者用戶(hù)打開(kāi)了另外一個(gè)應(yīng)用程序,服務(wù)仍然能夠保持正常運(yùn)行。
?????? 不過(guò)需要注意的是,服務(wù)并不是運(yùn)行在一個(gè)獨(dú)立的進(jìn)程當(dāng)中的,而是依賴(lài)于創(chuàng)建服務(wù)時(shí)所在的應(yīng)用程序進(jìn)程。當(dāng)某個(gè)應(yīng)用程序進(jìn)程被殺掉時(shí),所有依賴(lài)于該進(jìn)程的服務(wù)也會(huì)停止運(yùn)行。
??????另外,也不要被服務(wù)的后臺(tái)概念所迷惑,實(shí)際上服務(wù)并不會(huì)自動(dòng)開(kāi)啟線(xiàn)程,所有的代碼都是默認(rèn)運(yùn)行在主線(xiàn)程當(dāng)中的。也就是說(shuō),我們需要在服務(wù)的內(nèi)部手動(dòng)創(chuàng)建子線(xiàn)程,并在這里執(zhí)行具體的任務(wù),否則就有可能出現(xiàn)主線(xiàn)程被阻塞住的情況。
?
二、服務(wù)的基本用法
?????? 了解了Android 多線(xiàn)程編程的技術(shù)之后,下面就讓我們進(jìn)入到本章的正題,開(kāi)始對(duì)服務(wù)的相關(guān)內(nèi)容進(jìn)行學(xué)習(xí)。作為Android 四大組件之一,服務(wù)也少不了有很多非常重要的知識(shí)點(diǎn),那我們自然要從最基本的用法開(kāi)始學(xué)習(xí)了。
1 、定義一個(gè)服務(wù)
?????? 首先看一下如何在項(xiàng)目中定義一個(gè)服務(wù)。新建一個(gè)ServiceTest 項(xiàng)目,然后在這個(gè)項(xiàng)目中新增一個(gè)名為MyService 的類(lèi),并讓它繼承自Service,完成后的代碼如下所示
[java]?view plaincopy?????? 目前MyService 中可以算是空空如也,但有一個(gè)onBind()方法特別醒目。這個(gè)方法是Service 中唯一的一個(gè)抽象方法,所以必須要在子類(lèi)里實(shí)現(xiàn)。我們會(huì)在后面的小節(jié)中使用到onBind()方法,目前可以暫時(shí)將它忽略掉。
?????? 既然是定義一個(gè)服務(wù),自然應(yīng)該在服務(wù)中去處理一些事情了,那處理事情的邏輯應(yīng)該寫(xiě)在哪里呢?這時(shí)就可以重寫(xiě)Service 中的另外一些方法了,如下所示:
[java]?view plaincopy?????? 可以看到,這里我們又重寫(xiě)了onCreate()、onStartCommand()和onDestroy()這三個(gè)方法,它們是每個(gè)服務(wù)中最常用到的三個(gè)方法了。其中onCreate()方法會(huì)在服務(wù)創(chuàng)建的時(shí)候調(diào)用,onStartCommand()方法會(huì)在每次服務(wù)啟動(dòng)的時(shí)候調(diào)用,onDestroy()方法會(huì)在服務(wù)銷(xiāo)毀的時(shí)候調(diào)用。
?????通常情況下,如果我們希望服務(wù)一旦啟動(dòng)就立刻去執(zhí)行某個(gè)動(dòng)作,就可以將邏輯寫(xiě)在onStartCommand()方法里。而當(dāng)服務(wù)銷(xiāo)毀時(shí),我們又應(yīng)該在onDestroy()方法中去回收那些不再使用的資源。
?????另外需要注意,每一個(gè)服務(wù)都需要在AndroidManifest.xml 文件中進(jìn)行注冊(cè)才能生效,不知道你有沒(méi)有發(fā)現(xiàn),這是Android 四大組件共有的特點(diǎn)。于是我們還應(yīng)該修改AndroidManifest.xml文件,代碼如下所示:
[java]?view plaincopy這樣的話(huà),就已經(jīng)將一個(gè)服務(wù)完全定義好了。
?
2、啟動(dòng)和停止一個(gè)服務(wù)
我們?cè)诓季治募屑尤肓藘蓚€(gè)按鈕,分別是用于啟動(dòng)服務(wù)和停止服務(wù)的。然后修改MainActivity 中的代碼,如下所示:
[java]?view plaincopy?
我們?nèi)绾尾拍茏C實(shí)服務(wù)已經(jīng)成功啟動(dòng)或者停止了呢?最簡(jiǎn)單的方法就是在MyService 的幾個(gè)方法中加入打印日志,可以看到我們?cè)贛yService中已經(jīng)加入了。
下面我們看一下運(yùn)行效果:
開(kāi)啟服務(wù)后,LogCat中打印
關(guān)閉服務(wù)后,LogCat 中打印:
總結(jié)
以上是生活随笔為你收集整理的Android 四大组件 —— 服务的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 使用Control Flash 更新AB
- 下一篇: Android官方命令深入分析之Hier