《Android應(yīng)用開發(fā)》 課后習(xí)題參考答案 (李立亞) 第1-14章_第1頁
《Android應(yīng)用開發(fā)》 課后習(xí)題參考答案 (李立亞) 第1-14章_第2頁
《Android應(yīng)用開發(fā)》 課后習(xí)題參考答案 (李立亞) 第1-14章_第3頁
《Android應(yīng)用開發(fā)》 課后習(xí)題參考答案 (李立亞) 第1-14章_第4頁
《Android應(yīng)用開發(fā)》 課后習(xí)題參考答案 (李立亞) 第1-14章_第5頁
已閱讀5頁,還剩6頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

《Android應(yīng)用開發(fā)》課后習(xí)題參考答案

第1章Android開發(fā)簡介

1.如何搭建Android開發(fā)環(huán)境?

搭建Android開發(fā)環(huán)境需要以下幾個(gè)步驟:

(1)下載和安裝JDK

(2)配置PATH環(huán)境變量

(3)下載和安裝AndroidStudio

(4)創(chuàng)建Android模擬器

(5)下載和安裝AndroidSDK

2.Android源代碼的編譯過程是怎樣的?

Java源文件經(jīng)過JDK編譯器編譯成class文件后,Dalvik虛擬機(jī)中的Dx工具會將部分

class文件轉(zhuǎn)換成dex文件,dex文件進(jìn)一步被優(yōu)化成odex文件。

3.Android系統(tǒng)架構(gòu)包含的層次以及各層的特點(diǎn)是怎樣的?

Android系統(tǒng)采用分層架構(gòu),從低到高分為4層,依次是Linux內(nèi)核層、核心類庫層、

應(yīng)用程序框架層和應(yīng)用程序?qū)?

Linux內(nèi)核層為Android設(shè)備的各種硬件提供了底層驅(qū)動,底層驅(qū)動是應(yīng)用程序以訪問

底層硬件的形式實(shí)現(xiàn)人機(jī)交互。核心類庫層包含了系統(tǒng)庫和Android運(yùn)行時(shí)庫(Android

Runtime)o系統(tǒng)庫為Android系統(tǒng)提供主要的特性支持,Android運(yùn)行時(shí)庫提供了一些核心

庫和Dalvik虛擬機(jī)。應(yīng)用程序框架層提供了編寫應(yīng)用程序時(shí)用到的各種API。應(yīng)用程序?qū)邮?/p>

指所有安裝在移動設(shè)備上的Appo

第2章Android應(yīng)用界面布局設(shè)計(jì)

4.線性布局哪個(gè)屬性設(shè)置界面元素呈現(xiàn)垂直或水平排列?

屬性android:orientation控制排列方向,設(shè)置值"vertical"為垂直方向、"horizontal"

為水平方向,如果不設(shè)置該屬性,則默認(rèn)為水平方向排列。

5.屬性值match_parent和wrap_content有何區(qū)別?

在為控件設(shè)置尺寸layout_width和layout_height時(shí)。使用match_parent表示和父容器

尺寸一樣大,使用wrap_content表示控件的尺寸大小設(shè)置為包裹住內(nèi)容即可。

6.約束布局中如何實(shí)現(xiàn)控件居中?

在線性布局中,常使用android:layout_gravity屬性的"center"屬性值來設(shè)計(jì)控件的居

中顯示,在約束布局中通過設(shè)置控件的上下左右約束來完成控件的居中設(shè)計(jì)。設(shè)置約束后,

控件會自動排列在中間位置。

7.幀布局有什么特點(diǎn)?

幀布局方式,是將放在其中的子控件進(jìn)行堆疊放置,所有子控件的位置都是從幀布局的

左上角開始,因?yàn)槭嵌询B放置,所以會發(fā)生子控件覆蓋,后放置的子控件位于上面,會遮住

先放置的子控件。幀布局只有基礎(chǔ)屬性,不能使用androidgravity屬性設(shè)置子控件的位置。

8.安卓提供了哪些常用輔助布局工具?

常用的輔助工具有分組、屏障、輔助線等。分組Group可以把多個(gè)控件歸為一組,方便

隱藏或顯示一組控件??梢允褂闷琳螧arrier,在多個(gè)控件的一側(cè)放置一個(gè)屏障,相當(dāng)于一個(gè)

虛擬的分割墻,另一側(cè)控件以屏障Barrier為參照目標(biāo)控件設(shè)置約束關(guān)系,解決以多控件為

參照的布局問題。

第3章Android應(yīng)用界面效果

9.樣式和主題有什么不同?

樣式與主題在定義的語法方式上是一樣的,但應(yīng)用場合不同。樣式主要是針對控件的定

義。主題是針對整個(gè)應(yīng)用、Activity窗口的外觀設(shè)置.影響面更大,一次指定,可以使整個(gè)

應(yīng)用或整個(gè)AcWity窗口生效。。

10.sh叩e形狀與圖片相比有何優(yōu)點(diǎn)?比較適合用在哪些場合?

使用shape標(biāo)簽定義各種各樣的形狀,應(yīng)用到界面的控件中,使控件呈現(xiàn)特殊效果的外

觀。與使用圖片相比,使用shape形狀可以減少安裝包大小,并能較好地適配不同尺寸的手

機(jī)°適合應(yīng)用一些規(guī)則形狀圖形做背景時(shí)使用。

11.layer-list圖層列表的中可以使用哪些元素?

layer-list圖層列表,通過將圖一層一層疊加,來實(shí)現(xiàn)更復(fù)雜的顯示效果。layer-list中不

同的圖層使用item節(jié)點(diǎn)來定義,先定義節(jié)點(diǎn)的圖形在下面,后定義的圖形在上面??梢允?/p>

用圖片、形狀、圖層列表等作為節(jié)點(diǎn)中的圖層。

12.selector選擇器用途是什么?有何優(yōu)點(diǎn)?

selector選擇器是一種狀態(tài)列表,用來定義控件在不同狀態(tài)下的外觀。比如,將控件的

背景、顏色等屬性值設(shè)置為選擇器,當(dāng)控件狀態(tài)發(fā)生變化后,它的背景和顏色也會隨之變化。

使用選擇器配置控件外觀,使用上比較便利,可以節(jié)省大量后臺代碼開發(fā)調(diào)試工作,并且易

于修改和調(diào)試。

13.Android應(yīng)用如何實(shí)現(xiàn)國際化?上述界面設(shè)計(jì)工具可否應(yīng)用在國際化中?

通過增加面向特定國家和地區(qū)后綴的同名目錄、資源文件等,讓應(yīng)用實(shí)現(xiàn)資源自動適配

國際化。當(dāng)Android應(yīng)用運(yùn)行時(shí),Android系統(tǒng)會根據(jù)運(yùn)行的地區(qū)環(huán)境語言來匹配和使用這

些資源,從而實(shí)現(xiàn)自動適配目標(biāo)國家地區(qū)的語言文本和界面。

第4章Android應(yīng)用人機(jī)交互

14.Android應(yīng)用處理事件的方式有哪幾種?

Android開發(fā)框架提供了兩種事件開發(fā)方式。第一種方式,通過注冊事件監(jiān)聽器,讓應(yīng)

用獲得和處理事件。第二種方式,通過重寫父類事件方法,來獲得和處理事件,比如重寫

Activity類中的生命期方法來處理窗口的生命期事件。

15.選項(xiàng)菜單和上下文菜單有什么區(qū)別?如何規(guī)劃兩種菜單中的菜單項(xiàng)功能?

有的Android設(shè)備,會提供物理或虛擬的菜單按鍵,當(dāng)按下后,可以激活應(yīng)用的選項(xiàng)菜

單。有的應(yīng)用長按某個(gè)區(qū)域后會彈出上下文菜單。

選項(xiàng)菜單針對整個(gè)窗口的操作,上下文菜單針對某個(gè)控件的操作,根據(jù)應(yīng)用范圍選擇不

同的菜單。

16.常見控件的功能和用途是什么?控件如何處理事件?

UI界面控件,主要為UI界面開發(fā)提供支撐,用于信息呈現(xiàn)、用戶交互操作等功能。控

件多通過注冊事件監(jiān)聽器,來獲得和處理事件。有的事件是通過重寫父類事件方法,來獲得

和處理事件。

17.軟鍵盤的作用是什么?何時(shí)顯示軟鍵盤比較好?

使用Android應(yīng)用時(shí),經(jīng)常會用到軟鍵盤輸入數(shù)據(jù)。軟鍵盤有多種類型以應(yīng)對不同的輸

入場景。根據(jù)窗口應(yīng)用場景,來決定在窗口呈現(xiàn)時(shí)同時(shí)顯示軟鍵盤,還是等點(diǎn)擊用戶輸入框

時(shí)顯示軟鍵盤。

第5章Activity和Intent

1.Activity的作用是什么?

Activity是Android程序中的四大組件之一,為用戶提供可視化界面及操作。每個(gè)APP

中可以包含多個(gè)Activity,每個(gè)Activity負(fù)責(zé)管理一個(gè)用戶界面。在界面中可以添加多個(gè)控

件,并編寫相應(yīng)的后臺代碼切換到其他界面。

2.Activity的生命周期是什么?

Activity的運(yùn)行從開始到結(jié)束會經(jīng)歷各種狀態(tài),并且會發(fā)生從一人狀態(tài)到另一個(gè)狀態(tài)的

切換,這樣的過程就叫作生命周期。

3.Activity的啟動模式是什么?

默認(rèn)情況下,每啟動一個(gè)新的Activity都會創(chuàng)建新的實(shí)例,并覆蓋在原Activity之上,

單擊返回按鈕,最上面的Activity會被銷毀,下面的Activity重新顯示。在開發(fā)中,可以為

每個(gè)Activity指定恰當(dāng)?shù)膯幽J剑瑏韽?fù)用Activity實(shí)例,優(yōu)化APP的效率和資源占用。

4.兩個(gè)Activity之間如何傳遞數(shù)據(jù)?

Android系統(tǒng)中,組件之間可以進(jìn)行消息傳遞或者數(shù)據(jù)傳遞,使用的是Intent。Intent不

僅可以開啟Activity,還可以在各個(gè)Activ讓y之間傳遞數(shù)據(jù)。

5.常用對話框有哪些,分別有什么作用?

如果需要可交互的對話框,可以使用安卓SDK提供的AlertDialog類構(gòu)建可交互的對話

框,讓用戶選擇和確認(rèn)信息。此外安卓SDK還提供了用于日期和時(shí)間選擇的對話框類

DatePickerDialog和TimePickerDialog,這兩個(gè)類繼承自AlertDialog類,使用上相對比較簡

單,安卓SDK還提供了ProgressDialog進(jìn)度條對話框,這種對話框運(yùn)行期間用戶不能與主

界面交互,不推薦使用。

第6章子窗口設(shè)計(jì)

l.Fragment的作用是什么?

Fragment是Android3.0后引入的一個(gè)新的API,它是一種可以嵌入在活動中的UI片段,

能夠讓程序更加合理和充分地利用大屏幕的空間,可以將其看成一個(gè)小型Activity,它又被

稱作Activity片段。

2.Fragment加載到Activity有幾種方式?

Fragment加載到Activity有兩種方式,分別是靜態(tài)加載和動態(tài)加載。使用Fragment時(shí)

只需要將Fragment作為一個(gè)控件在Activity的布局文件中進(jìn)行引用即可。除了可以在布局

文件中添加Fragment之外,還可以在Activity中通過代碼動態(tài)添加Fragment,這種方式更

加靈活。

3.Fragment的生命周期是什么?

Fragment生命周期和Activity的生命周期相似,F(xiàn)ragment比Activity多了幾種方法。

onAttach。:當(dāng)Fragment和Activity建立關(guān)聯(lián)時(shí)調(diào)用。

onCreateView():SFragment創(chuàng)建視圖時(shí)調(diào)用。

onActivityCreated():當(dāng)相關(guān)聯(lián)的Activity的OnCreate。方法已返回E寸調(diào)用。

onDestroyView():當(dāng)Fragment中的視圖被移除時(shí)調(diào)用。

onDetach。:當(dāng)Fragment和Activity取消關(guān)聯(lián)時(shí)調(diào)用。

4.Fragment和Activity之間如何傳遞數(shù)據(jù)?

從Activity向Fragment中傳遞數(shù)據(jù)可以Fragment.getArguments方法向Fragment傳遞

參數(shù)值,并且通過Fragment.getArguments方法獲取傳遞的參數(shù)值,

從Fragment向Actvity中傳遞數(shù)據(jù)采用接口回調(diào)的方式實(shí)現(xiàn)數(shù)據(jù)的傳遞。

5.FragmentPagerAdapter與FragmentStatePagerAdapter的區(qū)別?

FragmentPagerAdapter適用于頁面比較少的情況,F(xiàn)ragmentStatePagerAdapter適用于

頁面比較多的情況。

第7章數(shù)據(jù)訪問

18.Android中有幾種數(shù)據(jù)存儲方式以及各自特點(diǎn)?

Android平臺的數(shù)據(jù)存儲方式有SharedPreferences配置文件、文件存儲、SQLite數(shù)據(jù)

庫等。SharedPreferences是And-oid提供的用來存儲簡單配置信息的存儲方式,底層采用

XML文件存儲數(shù)據(jù)。文件存儲,用途更廣泛,可以存儲各種類型的數(shù)據(jù)。JSON是一種輕量

級數(shù)據(jù)交換格式,現(xiàn)在廣泛使用。SQLite數(shù)據(jù)庫提供關(guān)系數(shù)據(jù)的存儲,可以存儲大量數(shù)據(jù)。

19.Android中如何使用SharedPreferences類?

SharedPreferences是一種輕型的數(shù)據(jù)存儲方式,底層是基于XML文件存儲key-value

鍵值對數(shù)據(jù),通常用來存儲一些簡單的配置信息。其存儲位置在/data/data/v包

名〉/shared_prefs目錄下。SharedPreferences與其他存儲方式相比,使用上簡單、方便,但

只能存儲boolean、int、float、long和String五種簡單的數(shù)據(jù)類型。

SharedPreferences類對象用來獲取數(shù)據(jù),存儲和修改數(shù)據(jù)通過該對象獲取的Editor對

象來實(shí)現(xiàn)。

20.如何實(shí)現(xiàn)JSON數(shù)據(jù)解析的?

JSON是一種輕量級的數(shù)據(jù)交換格式,它的全稱為“JavaScriptObjectNotation",它是

基于JavaScript編程語言的一個(gè)工集,主要用來交換數(shù)據(jù),這種數(shù)據(jù)格式易于閱讀和編寫,

同時(shí)也易于機(jī)器解析和生成。

21.SQLite數(shù)據(jù)庫是如何創(chuàng)建的?

Android應(yīng)用開發(fā)時(shí),需要繼承SQLiteOpenHelper類定義自己的數(shù)據(jù)庫工具類,該工

具類用來創(chuàng)建數(shù)據(jù)庫、創(chuàng)建表、升級數(shù)據(jù)庫表的操作。自定義類時(shí),需要重寫

SQLiteOpenHelper類中的onCreate。方法、onllpgrade。方法和構(gòu)造方法。

22.ListView控件如何實(shí)現(xiàn)數(shù)據(jù)展示?

ListView是一個(gè)列表視圖,以垂直的形式列出需要顯示的列表項(xiàng)。列表項(xiàng)由很多Item組

成,每個(gè)Item的布局都是相同的,這個(gè)Item布局會單獨(dú)使用一個(gè)XML定義,需要使用適

配器將數(shù)據(jù)填充到Item布局文件中,進(jìn)行多條目顯示。

第8章廣播和內(nèi)容提供者

23.廣播是什么?為何引入廣播這一組件?

廣播是一種在應(yīng)用程序內(nèi)、應(yīng)用程序之間傳輸消息的機(jī)制,當(dāng)某些事件發(fā)生時(shí),Android

系統(tǒng)、應(yīng)用程序都可以使用廣播向其他應(yīng)用發(fā)送這些事件信息。

在應(yīng)用中添加廣播組件,可以接收Android系統(tǒng)或者其他應(yīng)用發(fā)出的廣播事件,然后根

據(jù)廣播事件做相應(yīng)的處理。

24.廣播分類有哪幾種?為何限制全局廣播的使用?

可以從機(jī)制、類型、來源對廣播進(jìn)行分類。按廣播機(jī)制分類,廣播分為無序廣播和有序

廣播兩種。按廣播類型分類,廣播分為全局廣播和本地廣播。按廣播來源分類,廣播可分為

自定義廣播和系統(tǒng)廣播兩類。

全局廣播可以被任何應(yīng)用接收到,容易引起安全性的問題。比如我們發(fā)送的一些攜帶關(guān)

鍵性數(shù)據(jù)的廣播可能被其他應(yīng)用程序截獲或者其他程序不停向我們的廣播接收者發(fā)送垃圾

廣播。

25.本地廣播的優(yōu)點(diǎn)是什么?

本地廣播只能夠在本應(yīng)用內(nèi)部進(jìn)行傳遞,不用擔(dān)心隱私數(shù)據(jù)泄露,其他應(yīng)用程序也無法

將廣播發(fā)送到我們程序內(nèi)部,造成安全隱患。相比系統(tǒng)內(nèi)發(fā)送全局廣播,本地剛播更安全更

高效。

26.內(nèi)容提供者的作用是什么?

為了方便在不同應(yīng)用間共享數(shù)據(jù),Android系統(tǒng)為開發(fā)者提供了內(nèi)容提供者組件,該組

件定義了一套接口用以操作共享數(shù)據(jù),開發(fā)者通過重寫相關(guān)方法等方式,可以將自己的數(shù)據(jù)

開放給其他應(yīng)用。

27.如何為其他應(yīng)用提供數(shù)據(jù)?如何獲取其他應(yīng)用提供的數(shù)據(jù)?

要為其他應(yīng)用提供數(shù)據(jù),開發(fā)者需要在自己的項(xiàng)目中繼承ConteniProvider類自定義類,

并重寫父類中操作數(shù)據(jù)的相關(guān)抽象方法,就可以使用自己的數(shù)據(jù)源提供數(shù)據(jù)操作功能,可以

提供查詢、增加、修改、刪除等功能。在自定義好ConteniProvider類后,還需在清單文件

中注冊自定義的內(nèi)容提供者組件,并定義相關(guān)訪問權(quán)限。

在Activity當(dāng)中通過getContentResolver。方法得到當(dāng)前應(yīng)用的ContentResolver實(shí)例。

然后用它的增、刪、改、查成員方法操作目標(biāo)Contentprovider提供的數(shù)據(jù)即可。

ContentResolver類的增、刪、改、查成員方法和Contentprovider類的增、刪、改、查成員

方法對應(yīng),一方是數(shù)據(jù)請求方、一方是數(shù)據(jù)供給方。

28.本地廣播是否可以與內(nèi)容觀察者功能結(jié)合,解決應(yīng)用內(nèi)通訊問題,或?qū)崿F(xiàn)某種功能?

本地廣播與內(nèi)容觀察者功能結(jié)合可以解決應(yīng)用內(nèi)通訊問題。內(nèi)容觀察者可以監(jiān)聽內(nèi)容提

供者的數(shù)據(jù)是否發(fā)生變化,當(dāng)被監(jiān)聽的內(nèi)容提供者數(shù)據(jù)發(fā)生變化時(shí),就會回調(diào)自定義

Contentobserver類的onChange。方法,訪問和操作目標(biāo)數(shù)據(jù)。

第9章服務(wù)

29.服務(wù)是什么?使用服務(wù)的好處是什么?

服務(wù)(Service)是一種在后臺運(yùn)行的代碼組件。服務(wù)由其他組件啟動,服務(wù)啟動后在后臺

運(yùn)行,即使啟動服務(wù)的組件已銷毀,服務(wù)也不受影響。

使用服務(wù)的好處是:服務(wù)可以在后臺長期運(yùn)行,即使應(yīng)用退出后,服務(wù)還可以正常運(yùn)行。

比如音樂播放功能往往放在服務(wù)中運(yùn)行,實(shí)現(xiàn)后臺播放。需要接收網(wǎng)絡(luò)數(shù)據(jù)的應(yīng)用,也可以

放在服務(wù)中實(shí)現(xiàn)監(jiān)聽網(wǎng)絡(luò)數(shù)據(jù)的功能,即使應(yīng)用窗口退出了,也能實(shí)現(xiàn)實(shí)時(shí)在線功能。

30.啟動服務(wù)方式有哪幾種?

啟動服務(wù)有兩種方式:啟動方式使用服務(wù)和綁定方式使用服務(wù)。

31.如果需要與服務(wù)互動,使用哪種服務(wù)比較合適?

如果需要與服務(wù)互動,綁定方式使用服務(wù)比較合適。因?yàn)榫哂薪壎芰Φ姆?wù)需要提供

綁定接口,其他組件通過綁定服務(wù)的接口,可以與服務(wù)交互,為服務(wù)發(fā)送指令或者從服務(wù)獲

得結(jié)果。

32.前臺服務(wù)是什么?

前臺服務(wù)是一種可以被用戶觀察到的服務(wù),能顯示一些信息、并與用戶進(jìn)行一些簡單交

互操作(如音樂播放的控制、天氣狀態(tài)顯示等)。

33.前臺服務(wù)如何與主界面互動,前臺服務(wù)如何啟動應(yīng)用?

每個(gè)前臺服務(wù)都必須要在通知欄顯示一個(gè)通知(notification)o用戶可以感知到app的

前臺服務(wù)正在運(yùn)行。這個(gè)通知(notification)默認(rèn)是不能移除的。服務(wù)停止后,通知會被系

統(tǒng)移除。

Android8.0引入了一種全新的方法,即Context.startForegroundService(),以在前臺啟

動新服務(wù)。

第10章線程與消息處理

34.線程是什么?與進(jìn)程、應(yīng)用程序有何區(qū)別?

線程是一種輕量級任務(wù),從靜態(tài)視角看就是一段程序代碼。線程包含在進(jìn)程之中,是操

作系統(tǒng)能夠調(diào)度的最小單位。

一個(gè)進(jìn)程中可以有很多可以并發(fā)執(zhí)行的線程。與進(jìn)程相比,線程代碼更簡潔,線程的管

理比進(jìn)程的管理消耗的資源要少得多,并且可以共享進(jìn)程資源。

一個(gè)應(yīng)用程序往往會有很多功能,這些功能往往需要并行執(zhí)行,二匕如QQ,可以同時(shí)聽

音樂、聊天、看股票等,我們稱實(shí)現(xiàn)這些功能的代碼塊為子任務(wù),這些子任務(wù)往往會用線程

實(shí)現(xiàn)。

35.使用Java線程類編寫線程程序有幾種方式?有何區(qū)別?

使用Java線程類編寫線程程序有兩種種方式,可以通過繼承Thread類重寫run()方法

的方式創(chuàng)建線程;也可以通過實(shí)現(xiàn)Runnable接口重寫run()方法編寫線程代碼,然后用

Thread類管理線程的運(yùn)行。

繼承Thread類創(chuàng)建線程方式最簡單,實(shí)現(xiàn)Runnable接口方式創(chuàng)建線程代碼更靈活,因

為實(shí)現(xiàn)Runnable接口的類可以再繼承其他類。

36.Handler消息機(jī)制如何運(yùn)轉(zhuǎn)?send方式和post方式有何區(qū)別?

Handler消息機(jī)制通過MessageQueue消息隊(duì)列、Message消息、Handler消息處理者

和Looper消息分派者的協(xié)同工作來實(shí)現(xiàn)。其中MessageQueue是消息機(jī)制的運(yùn)轉(zhuǎn)中心,用

來儲存各種消息。Handler用來發(fā)送消息和接收消息。Message是事件信息的攜帶者。Looper

不停地監(jiān)測消息隊(duì)列里的Message,將Message派發(fā)給Handler消息處理者。

send方式是在工作線程中處理完耗時(shí)操作后調(diào)用handler的sendMessage(message)

把Message對象發(fā)送給主線程,在主線程中重寫handlerMessage()方法,判斷接收到的

消息進(jìn)行更新UI的操作;而post方式傳遞的是一個(gè)Runnable對象,更新UI的操作也是在

這個(gè)Runnable的run方法中進(jìn)行的,也就是說run方法中的代碼是執(zhí)行在主線程中的,雖

然它是寫在工作線程中,主線程在接收到消息后自動執(zhí)行Runnable的run方法中的代碼。

37.在線程中支持消息機(jī)制需要做哪些工作?

在線程中支持消息機(jī)制,按以下步驟添加消息機(jī)制相關(guān)代碼即可。

第一步,在線程類內(nèi)部,繼承Handler類定義線程的Handler消息處理類,該類中重寫

handleMessage。方法來處理發(fā)給線程的消息。

第二步,在線程的run。方法中調(diào)用Looper.prepare。方法,該方法會為線程創(chuàng)建Looper

對象和MesssageQueue消息隊(duì)列對象,這兩個(gè)對象會與當(dāng)前線程綁定。

第三步,在調(diào)用Looper.prepare。方法代碼之后,使用第一步的自定義Handler類創(chuàng)建

該線程的Handler■對象,該對象會自動綁定到第二步中創(chuàng)建的線程Looper對象上。注意創(chuàng)

建Handler對象的代碼不能在調(diào)用Loopcr.prcporc()方法代碼之前。

最后,調(diào)用Looper.loop()方法,開啟消息機(jī)制。該方法后會阻塞程序的運(yùn)行,因?yàn)樵摲?/p>

法的內(nèi)部是無限循環(huán)的,該方法通過循環(huán)來持續(xù)監(jiān)測該線程的MesssageQueue隊(duì)列是否有

消息,若有就取出一條消息派發(fā)給線程的Handler對象處理。

38.Android提供的幾個(gè)線程開發(fā)工具類的開發(fā)步驟是什么?

Android系統(tǒng)提供的HandlerThread類,開發(fā)步驟如下:

1)先用HandlerThread類倉健一個(gè)對象實(shí)例。

2)使用上步的對象實(shí)例的start。方法來啟動線程。

3)自定義Handler類并創(chuàng)建該類的對象實(shí)例,將對象綁定到上步已啟動的線程對象的

Looper對象上,這樣Handler對象中的handleMessage。方法運(yùn)行就會在后臺線程中回調(diào),

也就相當(dāng)于將后臺任務(wù)代碼放入后臺線程中執(zhí)行了。

4)用自定義Handler類的對象向后臺線程發(fā)消息,消息就會由自定義Handler類中的

handleMessage()^法處理。

Aruhoid系統(tǒng)提供了異步任務(wù)AsyncTask類,開發(fā)步驟如下:

1)繼承AsyncTask定義自己的類,根據(jù)需求實(shí)現(xiàn)核心方法。

2)用自定義的異步任務(wù)類創(chuàng)建對象。

3)調(diào)用該對象的execute。方法執(zhí)行異步任務(wù),如要取消任務(wù)的執(zhí)行則調(diào)用cancel。方

法取消異步任務(wù)。

Android系統(tǒng)提供了異步任務(wù)IntentService類,開發(fā)步驟如下:

1)繼承IntentService類實(shí)現(xiàn)自己的類,重寫onHandlelntent。方法,該方法有一個(gè)

Intent類型的參數(shù),該參數(shù)由startService。方法啟動服務(wù)時(shí)傳入。

2)在清單文件中注冊服務(wù)。

3)使用startService。方法啟動服務(wù),通過Intent對象傳入任務(wù)參數(shù)。

第11章網(wǎng)絡(luò)編程

39.如何獲取手機(jī)網(wǎng)絡(luò)狀態(tài)?

使用ConnectivityManager連接管理類獲取Networkinfo類對象。再根據(jù)該對象中的網(wǎng)

絡(luò)類型,獲取該類型網(wǎng)絡(luò)的服務(wù)類對象,比如移動網(wǎng)絡(luò)是TelephonyManager類對象,WIFI

網(wǎng)絡(luò)的是WifiManager類對象。

40.HttpURLConnection網(wǎng)絡(luò)編程的優(yōu)缺點(diǎn)是什么?

HttpURLConnection是一種多用途、輕量極的HTTP客戶端,使用它來進(jìn)行HTTP操作

可以適用于大多數(shù)的應(yīng)用程序。雖然HttpURLConnection的API提供的比較簡單,但是同時(shí)

這也使得我們可以更加容易地去使用和擴(kuò)展它。比較輕便,靈活,易于擴(kuò)展。

在android2.2及以下版本中HttpURLConnection存在著一些bug,所以建議在android

2.3以后使用HttpURLConnection,2.3之前使用HttpCIiento

41.如何在Android應(yīng)用中使用HttpURLConnection?如何與UI界面交互?

HttpURLConnection類是使用需要以下幾個(gè)步驟:

1)創(chuàng)建URL對象并設(shè)置網(wǎng)址,調(diào)用openConnection。方法創(chuàng)建HttpURLConnection

對象。

2)按順序設(shè)置HttpURLConnection對象的參數(shù)。

3)使用HttpURLConnection對象的connect。方法建立連接。

4)若連接成功,使用連接對象的輸入輸出流收發(fā)數(shù)據(jù)。

5)使用完畢,關(guān)閉連接,釋放資源。

在Android中使用網(wǎng)絡(luò)連接功能,不能在UI主線程中進(jìn)行,需要放在后臺線程中。因

此需要使用AsyncTask類構(gòu)造后臺線程訪問網(wǎng)絡(luò)的程序,通過AsyncTask類的

onPostExecutefStringresult)方法將訪問結(jié)果顯示在III界面上。

42.GET方式和POST方式訪問服務(wù)器有何區(qū)別?

POST請求方式跟GET請求方式編程步驟大同小異,不同點(diǎn)是POST方式在連接成功后,

可以向服務(wù)器發(fā)送數(shù)據(jù),比如發(fā)送參數(shù)、上傳文件。

43.Volley框架的優(yōu)點(diǎn)是什么?該框架可以適用于所有類型的網(wǎng)絡(luò)開發(fā)嗎?

Volley框架封裝了HTTP協(xié)議通信和后臺線程,簡單易用,并且優(yōu)化了網(wǎng)絡(luò)訪問性能,

適合頻繁、小數(shù)據(jù)量的網(wǎng)絡(luò)訪問。

Volley框架不適用于所有類型的網(wǎng)絡(luò)開發(fā),適合頻繁、小數(shù)據(jù)量的網(wǎng)絡(luò)訪問,不適合大

量數(shù)據(jù)傳輸?shù)木W(wǎng)絡(luò)訪問。

第12章WebView控件使用

44.WebView控件是什么?使用該控件可以完成什么功能?

WebView控件是一個(gè)微型瀏覽器,包含一個(gè)瀏覽器的基本功能,例如:滾動、縮放、前

進(jìn)、后退等功能,還可以通過該控件與網(wǎng)頁交互,實(shí)現(xiàn)混合開發(fā)。

45.如何定制WebView控件功能?

要定制WebView控件功能,需要通過三個(gè)類WebSettingssWebViewClient和

WebChromeClient來實(shí)現(xiàn)。WebSettings類用來配置控件的功能和行為。WebViewClient類

可以讓W(xué)ebView控件具備處理網(wǎng)頁中的事件的能力。WebChromeClient類進(jìn)一步拓展了

WebView控件處理網(wǎng)頁內(nèi)事件的能力,比如讓Android程序與網(wǎng)頁內(nèi)的Javascript程序交

互。

46.如何通過WebView控件獲取網(wǎng)頁中的事件?

繼承WebViewClient類該類定義自己的類,并重寫相關(guān)方法,這些方法一般是回調(diào)方

法,當(dāng)網(wǎng)頁中的事件發(fā)生后,會回調(diào)這些方法,開發(fā)者可以在這些方法中加入自己的代碼,

完成事件的捕獲和處理。自定義類完成后,創(chuàng)建該類的對象,然后調(diào)用WebView控件的

setWebViewClient()方法,為WebView控件設(shè)置關(guān)聯(lián)該對象。WebChromeClient類使用同

理C

47.如何通過WebView控件獲取網(wǎng)頁內(nèi)容?

在WebView控件中,可以監(jiān)聽長按事件,捕獲選中的網(wǎng)頁內(nèi)容。要實(shí)現(xiàn)這個(gè)功能,需

要用WebView控件的setOnLongClickListener()方法設(shè)置長按監(jiān)聽事件,監(jiān)聽事件類需要實(shí)

現(xiàn)View.OnLongClickListener接口,重寫該接口中的。nLongClick()方法,該方法參數(shù)中可以

獲得WebView控件返回的HitTesiResult類對象,該對象中攜帶了選中內(nèi)容信息。

48.Android原生代碼如何與網(wǎng)頁代碼交互?

使用WebView控件調(diào)用網(wǎng)頁上的JavaScript代碼有兩種方式通過loadUrl()方法調(diào)用;

通過evaluateJavascript()方法調(diào)用。JavaScript調(diào)用Android代碼有三種方式:通過

WebViewClient對象的shouldOveirideUrlLoading()方法攔截url方式;通過WebView控件

的addJavascriptlnterface()將Android對象映射到JavaScript代碼方式;通過

WebChromeClient對象攔截JS對話框方式。

第13章傳感器與定位

49.Android手機(jī)、平板上一般都集成什么傳感器?

Android設(shè)備中一般都會內(nèi)置一些傳感器,為人們提供輔助功能,比如測量運(yùn)動、屏幕

方向、位置、環(huán)境等,不同的設(shè)備提供的傳感器數(shù)量不一樣,一些常用傳感器在Android設(shè)

備上都會提供。

50.傳感器的坐標(biāo)系有幾種?有何區(qū)別?

傳感器框架使用標(biāo)準(zhǔn)的3軸坐標(biāo)系來表示傳感器測量的數(shù)據(jù)值,對于大多數(shù)傳感器,以

屏幕為基準(zhǔn)定義坐標(biāo)系,X軸為水平向右延伸,Y軸為垂直向上延伸,Z軸為垂直于屏幕向

外延伸。

有些傳感器,如旋轉(zhuǎn)矢量傳感器,坐標(biāo)系以地球面為參照,X軸與地面相切,并大約指

向東。Y軸與地面相切,并指向地磁北極。Z軸指向天空并與地平面垂直。

51.傳感器有哪幾類?傳感器的數(shù)據(jù)如何獲???

Android平臺支持的傳感器分為三類:環(huán)境傳感器、動態(tài)傳感器和位置傳感器。要獲得

傳感數(shù)據(jù),需要注冊傳感器監(jiān)聽器,監(jiān)聽傳感器事件。自定義傳感器監(jiān)聽器類時(shí)需要實(shí)現(xiàn)

SensorEventListener接口,并重寫該接口的兩個(gè)方法onAccuracyChanged。精度變化方法和

onSensorChanged。傳感器數(shù)據(jù)變化方法。當(dāng)傳感器發(fā)生相應(yīng)的事件時(shí),會回調(diào)這兩個(gè)方法,

開發(fā)者就可以在這兩個(gè)方法中獲取相應(yīng)的數(shù)據(jù)。

52.如何使用Android的定位功能?

Android系統(tǒng)為開發(fā)定位服務(wù)提供了開發(fā)框架,利用開發(fā)框架和工具類,可以方便地獲

取位置數(shù)據(jù)。獲取GPS定位數(shù)據(jù)開發(fā)主要有4步:配置權(quán)限、獲取LocationManager位置

管理者對象實(shí)例、獲取GPS位置提供者、自定義位置監(jiān)聽器并注冊,通過LocationListener

接口方法獲得位置信息。

53.定位數(shù)據(jù)從哪產(chǎn)生?沒有內(nèi)置導(dǎo)航芯片的手機(jī)可以使用定位功能嗎?

Android系統(tǒng)中提供

溫馨提示

  • 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

提交評論