Android Studio移動應(yīng)用開發(fā)基礎(chǔ)(第2版) 課件 第12章 使用后臺任務(wù)_第1頁
Android Studio移動應(yīng)用開發(fā)基礎(chǔ)(第2版) 課件 第12章 使用后臺任務(wù)_第2頁
Android Studio移動應(yīng)用開發(fā)基礎(chǔ)(第2版) 課件 第12章 使用后臺任務(wù)_第3頁
Android Studio移動應(yīng)用開發(fā)基礎(chǔ)(第2版) 課件 第12章 使用后臺任務(wù)_第4頁
Android Studio移動應(yīng)用開發(fā)基礎(chǔ)(第2版) 課件 第12章 使用后臺任務(wù)_第5頁
已閱讀5頁,還剩22頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第12章使用后臺任務(wù)Android

Studio移動應(yīng)用開發(fā)基礎(chǔ)(第2版)目錄12.1使用Java線程執(zhí)行后臺任務(wù)同步練習(xí)一使用AsyncTask工具類執(zhí)行后臺任務(wù)使用Service完成后臺任務(wù)同步練習(xí)二12.1使用Java線程執(zhí)行后臺任務(wù)

在Android平臺上,Activity運(yùn)行在稱為UI線程的主線程中,并且Android操作系統(tǒng)對Activity的響應(yīng)時(shí)間有嚴(yán)格的要求:對每個用戶操作的響應(yīng)時(shí)長不能超過規(guī)定的時(shí)間長度,否則Android操作系統(tǒng)會出現(xiàn)異常,并且會影響用戶的使用體驗(yàn)。

在Android平臺上,執(zhí)行時(shí)間較長的任務(wù)都應(yīng)該放在后臺進(jìn)行。此外,執(zhí)行時(shí)間較長的任務(wù)和執(zhí)行時(shí)間不確定的任務(wù),如網(wǎng)絡(luò)通信,都必須放在后臺執(zhí)行。在后臺執(zhí)行任務(wù),完全可以使用Java的線程機(jī)制進(jìn)行。

在Android應(yīng)用程序中,在后臺執(zhí)行任務(wù)是非常普遍的,Android

SDK也提供了相應(yīng)的機(jī)制,使在后臺執(zhí)行任務(wù)變得更加容易實(shí)現(xiàn),包括使用AsyncTask工具類。

舉例說明如何使用Java的Thread類執(zhí)行后臺任務(wù)。該應(yīng)用程序可以使用一個TextView組件實(shí)時(shí)顯示當(dāng)前系統(tǒng)的日期和時(shí)間,運(yùn)行效果如圖所示。點(diǎn)擊“停止”按鈕,可以停止實(shí)時(shí)顯示當(dāng)前系統(tǒng)的日期和時(shí)間,并且按鈕上的文字會變?yōu)椤皢印?,再次點(diǎn)擊該按鈕,可以再次實(shí)時(shí)顯示當(dāng)前系統(tǒng)的日期和時(shí)間。新建一個名為Ch1201的Android應(yīng)用程序工程。修改布局文件res/layout/activity_main.xml中:修改res/values/strings.xml文件:修改MainActivity.java文件中的代碼:

Android中的每個Activity都運(yùn)行在自己獨(dú)立的線程中,這個線程通常稱為UI線程,Activity通過UI線程與用戶進(jìn)行交互。

為了保證界面交互的實(shí)時(shí)性、不影響用戶體驗(yàn),Android規(guī)定,Activity完成交互的時(shí)間長度不能超過規(guī)定的時(shí)間長度(10秒),如果超過規(guī)定的時(shí)間長度,那么Android會發(fā)生異常。

Android規(guī)定,只能由UI線程對Activity中顯示的信息進(jìn)行更新,其他線程都不能更新Activity中顯示的信息,否則會發(fā)生異常。

為了讓非UI線程也能修改Activity中的信息,Android為每個Activity都提供了一個默認(rèn)的消息隊(duì)列,需要修改Activity中顯示信息的線程通過這個消息隊(duì)列向Activity發(fā)送消息,進(jìn)而由Activity的UI線程修改

Activity中顯示的信息,Handler類就是為此設(shè)計(jì)的。12.2同步練習(xí)一

讀者可以將12.1節(jié)中的案例應(yīng)用程序復(fù)制到自己的開發(fā)環(huán)境中,并且進(jìn)行如下修改:每到整點(diǎn),如早上

8:00、晚上10:00,都會自動播放一段簡短的音樂。12.3使用AsyncTask工具類執(zhí)行后臺任務(wù)Android為了便于執(zhí)行后臺任務(wù),提供了AsyncTask工具類。使用AsyncTask工具類,需要派生AsyncTask工具類的一個子類,并且重寫AsyncTask工具類中的以下4個方法:protected

void

onPreExecute()protected

Result

doInBackground(Params...

params)protected

void

onprogressUpdate(Progress...

values)protected

void

onPostExecute(Result

result)

AsyncTask工具類支持3個泛型的類參數(shù),因此,在派生AsyncTask工具類的子類時(shí),需要指出3個數(shù)據(jù)類型:第一個數(shù)據(jù)類型是傳遞給doInBackground()方法的Params數(shù)據(jù)類型,第二個數(shù)據(jù)類型是傳遞給onprogressUpdate()方法的Progress數(shù)據(jù)類型,第三個數(shù)據(jù)類型是傳遞給onPostExecute()方法的Result數(shù)據(jù)類型。對于不需要使用的參數(shù),可以將其對應(yīng)的AsyncTask泛型的類參數(shù)設(shè)置為Void類型。

舉例說明如何使用AsyncTask工具類執(zhí)行后臺任務(wù):使用AsyncTask工具類實(shí)現(xiàn)12.1節(jié)中的案例應(yīng)用程序,該案例應(yīng)用程序運(yùn)行效果的首界面如圖12-2所示:新建一個名為Ch1202的Android應(yīng)用程序工程。修改布局文件res/layout/activity_main.xml:修改res/values/strings.xml文件:修改MainActivity.java文件:12.4使用Service完成后臺任務(wù)

Service是Android中的組件之一,它沒有UI接口。使用

Service可以完成一些需要長時(shí)間在后臺執(zhí)行的任務(wù)。

Android中的其他組件,如Activity,都可以啟動并運(yùn)行一個

Service。Service一旦被啟動,就會持續(xù)地在后臺運(yùn)行,直到被停止。

Android提供兩種類型的Service,分別為啟動式服務(wù)和綁定式服務(wù),本節(jié)主要介紹啟動式服務(wù)。

Service也具有固有的生命周期,可以通過重寫生命周期回調(diào)方法實(shí)現(xiàn)對Service的控制。

雖然Service是后臺服務(wù),但是Service是運(yùn)行在應(yīng)用程序的UI線程中的,因此在Service的各個回調(diào)方法中只能進(jìn)行一些簡

短的工作,需要長時(shí)間執(zhí)行的任務(wù)應(yīng)該交給其他線程運(yùn)行。舉例說明Service的使用方法:使用Service在后臺播放音樂。

使用Service播放音樂,使用Activity啟動該Service,在關(guān)閉這個Activity后,Service仍然可以在后臺播放音樂。該案例應(yīng)用程序的運(yùn)行效果如圖12-5所示。點(diǎn)擊“播放1號音樂”或“播放2號音樂”按鈕,應(yīng)用程序會啟動一個Service,用于播放相應(yīng)的音樂,同時(shí)在系統(tǒng)的通知欄中顯示一個播放圖標(biāo),如圖12-6所示。在關(guān)閉Activity后,不會停止播放音樂。通過下拉通知欄,再次啟動Activity,對音樂播放進(jìn)行控制。中新建一個名為Ch1203的Android應(yīng)用程序工程。修改布局文件res/layout/activity_main.xml:修改res/values/strings.xml文件:MyService.java文件:onstartCommand()回調(diào)方法的返回值及其含義如下。START_NOT_STICKY。當(dāng)系統(tǒng)資源緊缺時(shí),在onstartCommand()回調(diào)方法返回?cái)?shù)據(jù)后,如果系統(tǒng)結(jié)束了這個Service,則不需要重新創(chuàng)建和啟動這個Service。START_STICKY。當(dāng)系統(tǒng)資源緊缺時(shí),在onstartCommand()回調(diào)方法返回?cái)?shù)據(jù)后,如果系統(tǒng)結(jié)束了這個Service,則需要重新創(chuàng)建和啟動這個Service,并且再次使用Intent對象為null的參數(shù)調(diào)用該

Service的onstartCommand()回調(diào)方法。START_REDELIVER_INTENT。當(dāng)系統(tǒng)資源緊缺時(shí),在onstartCommand()回調(diào)方法返回?cái)?shù)據(jù)后,如果系統(tǒng)結(jié)束了這個Service,則需要重新創(chuàng)建和啟動這個Service,并且使用之前調(diào)用onstartCommand()回調(diào)方法時(shí)的Intent參數(shù)再次調(diào)用該Service的onstartCommand()回調(diào)方法。

無論采用何種方式結(jié)束Service,系統(tǒng)都將調(diào)用MyService類中的onDestroy()回調(diào)方法,用于停止正在播放的音樂,并且取消在通知欄中顯示的通知修改MainActivity.java文件:修改Andro

溫馨提示

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

評論

0/150

提交評論