遠(yuǎn)見(jiàn)全部android底層3應(yīng)用補(bǔ)充篇_第1頁(yè)
遠(yuǎn)見(jiàn)全部android底層3應(yīng)用補(bǔ)充篇_第2頁(yè)
遠(yuǎn)見(jiàn)全部android底層3應(yīng)用補(bǔ)充篇_第3頁(yè)
遠(yuǎn)見(jiàn)全部android底層3應(yīng)用補(bǔ)充篇_第4頁(yè)
遠(yuǎn)見(jiàn)全部android底層3應(yīng)用補(bǔ)充篇_第5頁(yè)
已閱讀5頁(yè),還剩17頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、Android應(yīng)用-底層過(guò)渡篇AndroidAndroid是開(kāi)發(fā)的基于Linux的、開(kāi)源的、智能操作系統(tǒng)。Android包括操作系統(tǒng)、中間件和應(yīng)用程序,由于源代碼開(kāi)放,Android可以被移植到不同的硬件上。2HTCG13與平板4Android的基石Dalvik Dalvik與JVM的區(qū)別Dalvik是基于寄存器的,JVM是基于棧的Dalvik經(jīng)過(guò)優(yōu)化,允許在有限的內(nèi)存里同時(shí)運(yùn)行多個(gè)虛擬機(jī)實(shí)例,并且每一個(gè)Dalvik應(yīng)用作為一個(gè)獨(dú)立的Linux進(jìn)程執(zhí)行。這樣可以防止一個(gè)虛擬機(jī)其它虛擬機(jī)。時(shí),不會(huì)影響6Android 的相關(guān)文件類型 Java 文件 - 應(yīng)用程序源文件 Class 文件 - Ja

2、va 編譯后的目標(biāo)文件 Dex 文件 -上的可執(zhí)行文件 APK文件 - Android 上的安裝文件7Android四大組件 Activity BroadcastReceiver Service Content Provider8Activity在Android的程序當(dāng)中,Activity一般代表屏幕的一屏。如果把比作一個(gè)瀏覽器,那么Activity就相當(dāng)于一個(gè)網(wǎng)頁(yè)。在Activity當(dāng)中,可以添加一些View,并且可以對(duì)這些View做一些事件處理。ent就是一次對(duì)將要執(zhí)行的操作的抽象描述一個(gè)。通過(guò)ent可以在多個(gè)Activity之間進(jìn)行跳轉(zhuǎn)ent中兩個(gè)最重要的部分是ent的動(dòng)作(。Actio

3、n)和動(dòng)作對(duì)應(yīng)的數(shù)據(jù)(Data)。ent有關(guān)系的一個(gè)類叫ent Filters。如果說(shuō)與ent是一個(gè)有效請(qǐng)求,一個(gè)ent Filters則用于描述一個(gè)Activity(或者ent Receiver)能夠操作哪ent。些9Broadcast Receiver可以使用BroadcastReceiver來(lái)讓應(yīng)用對(duì)一個(gè)外部的事件做出響應(yīng)。例如,當(dāng)呼入這個(gè)外部事件到來(lái)的時(shí)候,可以利用BroadcastReceiver進(jìn)行處理BroadcastReceiver不能生成UI,也就是說(shuō)對(duì)于用戶來(lái)說(shuō)不是透明的,用戶是看不到的。 BroadcastReceiver通過(guò)NotificationManager來(lái)通知用

4、戶這些事情發(fā)生了。BroadcastReceiver既可以在AndroidManifest.xml中,也可以在運(yùn)行時(shí)的代碼中使用Context.registerReceiver()進(jìn)行。只要了,當(dāng)事件來(lái)臨的時(shí)候,即使程序沒(méi)有啟動(dòng),系統(tǒng)也在需要的時(shí)候啟動(dòng)程序。各種應(yīng)用還可以通過(guò)使用ContexdBroadcast()將它們自己的10。ent broadcasts廣播給其它應(yīng)用程序ServiceService是一種程序,它可以運(yùn)行很長(zhǎng)的時(shí)間,但是它卻沒(méi)有用戶界面。這么說(shuō)有點(diǎn)枯燥,例如:打開(kāi)一個(gè)音樂(lè)器的程序,這個(gè)時(shí)候若想上網(wǎng)了,那么,Android的瀏覽器,這個(gè)時(shí)候雖然瀏覽器這個(gè)程序,但是,歌曲的打

5、開(kāi)已經(jīng)進(jìn)入了并沒(méi)有停止,而是在繼續(xù)一首接著一首的。其實(shí)這音樂(lè)的Service進(jìn)行控制。個(gè)就是由通過(guò)startService(ent service)可以來(lái)啟動(dòng)一個(gè)Service,通過(guò)Context.bindService()可以綁定一個(gè) Servcie。11Content Provider 數(shù)據(jù)在Android當(dāng)中是私有的,當(dāng)然這些數(shù)據(jù)包括文件數(shù)據(jù)和數(shù)據(jù)庫(kù)數(shù)據(jù),以及一些其他類型的數(shù)據(jù)。一個(gè)Content Provider類實(shí)現(xiàn)了一組標(biāo)準(zhǔn)的方法接口此Content,從而能夠讓其它的應(yīng)用保存或Provider的各種數(shù)據(jù)類型。12entent是一種運(yùn)行時(shí)機(jī)制,它能在程序運(yùn)行的過(guò)程中連接兩個(gè)不同的組件

6、。通過(guò)ent,你的程序可以向Android表達(dá)某種請(qǐng)求或者意愿,Android會(huì)根據(jù)意愿的內(nèi)容選擇適當(dāng)?shù)慕M件來(lái)請(qǐng)求。Android里的Activity,Service,BroadcastReceiver, 它們都是通過(guò)ent機(jī)制進(jìn)行激活調(diào)用的,而不ent的不同方式。同類型的組件有傳遞激活調(diào)用一個(gè)新的Activity或者讓一個(gè)現(xiàn)有的Activity執(zhí)行新的操作,可以通過(guò)調(diào)用Context.startActivity()或者 Activity.startActivityForResult()方法。這兩方法參數(shù)里要傳ent對(duì)象。遞進(jìn)一個(gè)13Android里的控件按鈕(Button)文本框(TextV

7、iew)編輯框(EditText)多項(xiàng)選擇(CheckBox)單項(xiàng)選擇(RadioBox)下拉列表(Spinner)自動(dòng)完成文本(pleteTextView)日期選擇器(Dat時(shí)間選擇器(Timcker)cker)滾動(dòng)視圖(ScrollView)進(jìn)度條(ProgressBar)拖動(dòng)條(SeekBar)評(píng)分組件(Rating Bar)視圖(ImageView)按鈕(ImageButton)切換(ImageSwither&Gallery)列表視圖(ListView)網(wǎng)格視圖(GridView)(Tab) 14Android里的Jni調(diào)用機(jī)制 Android的HAL的實(shí)現(xiàn)需要通過(guò)JNI(JavaNa

8、tiveerface),JNI簡(jiǎn)單來(lái)說(shuō)就是java程序可以調(diào)用C/C+寫的動(dòng)態(tài)庫(kù),這樣的話,HAL可以使用C/C+語(yǔ)言編寫,效率更高。 對(duì)于像android這樣的,有很多的外層是需要操作的,如wifi,藍(lán)圍設(shè)備在牙,觸摸屏,重力感應(yīng),鍵盤等,如果直接通過(guò)java語(yǔ)言操作是很難實(shí)現(xiàn)的,JVM也無(wú)法模擬這些硬件。15Android里的Jni調(diào)用機(jī)制JNI是Java Nativeerface的縮寫,中文為JAVA本地調(diào)用。從Java1.1開(kāi)始,Java Nativeerface(JNI)標(biāo)準(zhǔn)成為java的一部分,它允許Java代碼和其他語(yǔ)言寫的代碼進(jìn)行交互。JNI一開(kāi)始是為了本地已編譯語(yǔ)言,尤其是C

9、和C+而設(shè)計(jì)的,但是它并不妨礙你使用其他語(yǔ)言,只要調(diào)用約定受支持就可以了。使用java與本地已編譯的代碼交互,通常會(huì)喪失可移植性。但是,有些情況下這樣做是可以接受的,甚至是必須的,比如,使用一些舊的庫(kù),與硬件、操作系統(tǒng)進(jìn)行交互,或者為了提高程序的性能。JNI標(biāo)準(zhǔn)至少保證本地代碼能工作在任何Java虛擬機(jī)實(shí)現(xiàn)下。16Android里的Jni調(diào)用機(jī)制Java語(yǔ)言Jni語(yǔ)法和調(diào)用規(guī)則C, C+語(yǔ)言17將Java語(yǔ)言的數(shù)據(jù)類型轉(zhuǎn)換成底層語(yǔ)言數(shù)據(jù)類型。將Java語(yǔ)言的方法調(diào)用,轉(zhuǎn)換為調(diào)用底層語(yǔ)言函數(shù)或方法。Android里的Jni調(diào)用機(jī)制Jni在Java和C、C+等語(yǔ)言之間建立了一個(gè)橋梁作用,因此,JN

10、I首先要做的,就是兩者間的數(shù)據(jù)類型。類型,在JNI中都被定義為 jobject 類型,在所有其它C中都定義為void*。18Java Language TypeJNI TypejbytejbytecharjcharshortjshortjlongjlongfloatjfloatdoublejdoubleAndroid里的Jni調(diào)用機(jī)制 Java中可以直接調(diào)用底層語(yǔ)言的函數(shù)或方法,Jni規(guī)定了Java調(diào)用底層語(yǔ)言的方法簽名規(guī)范。19類型簽名Java 類型類型簽名Java 類型ZBbyteICcharFfloatSshortBbyteICcharJlongSshortFfloatDdoubleDdoubleJlongLfully-qualified- class(全限定的類)ZAndroid里的Jni調(diào)用機(jī)制 函數(shù)簽名通常是以下結(jié)構(gòu):返回值fun(參數(shù)1,參數(shù)2,參數(shù)3); 其對(duì)應(yīng)的Jni方法簽名格式為:(參數(shù)1參數(shù)2參數(shù)3)返回值 注意:函數(shù)名,在Jni中沒(méi)有體現(xiàn)出來(lái)參數(shù)列表相挨著,中間沒(méi)有逗號(hào),沒(méi)有空格返回值出現(xiàn)在()后面如果參數(shù)是類型,那么參數(shù)應(yīng)該為:L類型;20Android里的Jni調(diào)用機(jī)制 練習(xí) ()ZisLedOn(void);void setLedOn( (I)ledN

溫馨提示

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

評(píng)論

0/150

提交評(píng)論