Android培訓資料_第1頁
Android培訓資料_第2頁
Android培訓資料_第3頁
Android培訓資料_第4頁
Android培訓資料_第5頁
已閱讀5頁,還剩79頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、 技術的學習,是一種恒定的積累.好奇心?好奇心? + 引導引導 = 入門!入門!一.Android開發了解Android是什么Android是一個針對移動設備的開源軟件平臺,該平臺包括操作系統、中間件、用戶界面和應用軟件。Android歷史Android一詞的本義指“機器人”,同時也是Google于2007年11月5日宣布的基于Linux平臺的開源手機操作系統的名稱。Google還聯合手機制造商、手機芯片廠商、移動運營商,共同于2007年11月組建一個全球性的聯盟組織,稱作開放手機聯盟(Open HandsetAlliance),共同來開發Android。Android SDK(Softwar

2、e Development Kit, 即軟件開發工具包)Android SDK提供了在Android平臺上使用Java語言進行Android應用開發必須的工具和API接口。Android能干什么下面羅列了一些Android的特性,包含但不限于:1:應用程序框架,支持組件的重用與替換2:Dalvik虛擬機 專門為移動設備做了優化3:內部集成瀏覽器,該瀏覽器基于開源的WebKit引擎4:優化的圖形庫:包括2D和3D圖形庫,3D圖形庫基于OpenGL ES(硬件加速可選)5:SQLite用作結構化的數據存儲6:多媒體支持 包括常見的音頻、視頻和圖片文件格式 (如 MPEG4, H.264, MP3,

3、 AAC, AMR, JPG, PNG, GIF)7:GSM電話 (依賴于硬件)8:藍牙Bluetooth, EDGE, 3G, and WiFi (依賴于硬件)9:照相機,GPS,指南針,和加速度計 (依賴于硬件)10:豐富的開發環境 包括設備模擬器,調試工具,內存及性能分析圖表,和Eclipse集成開發環境插件Android有什么Android官方系統架構圖:應用程序層應用程序層(Applications)應用程序框架層應用程序框架層(Application Framework)系統運行庫層系統運行庫層(Libraries+Android RunTime)Linux內核層內核層(Linux

4、 Kernel)應用程序層應用程序層(Applications)Android平臺的電子設備,包括Android手機、Android平板、Android MP4、Android GPS等一系列電子產品的火熱,很大程度上歸功于大量豐富方便的Android軟件。這其中包括email客戶端、短信、日歷、地圖、瀏覽器、聯系人管理程序等等。應用程序框架層應用程序框架層(Application Framework)簡潔清晰的Android應用框架為快速敏捷開發Android軟件提供了可能,這也是近兩年來Android為什么這么火熱的原因之一。Activity Manager(活動管理器)管理各個應用程序生

5、命周期以及通常的導航回退功能Window Manager(窗口管理器)管理所有的窗口程序Content Provider(內容提供器)使得不同應用程序之間存取或者分享數據View System(視圖系統)構建應用程序的基本組件Notification Manager(通告管理器)使得應用程序可以在狀態欄中顯示自定義的提示信息Package Manager(包管理器)Android系統內的程序管理Telephony Manager(電話管理器)管理所有的移動設備功能Resource Manager(資源管理器)提供應用程序使用的各種非代碼資源,如本地化字符串、圖片、布局文件、顏色文件等Locat

6、ion Manager(位置管理器)提供位置服務XMPP Service(XMPP服務)提供Gtalk服務(手機24小時開機,Gtalk 24小時在線!)系統運行庫層系統運行庫層(Libraries+Android RunTime)系統庫系統庫是應用程序框架的支撐,是連接應用程序框架層與Linux內核層的重要紐帶。其主要分為如下幾個部分:Surface Manager 執行多個應用程序時,負責管理顯示與存取操作間的互動,另外也負責2D繪圖與3D繪圖進行顯示合成。Media Framework 多媒體庫,基于PacketVideo OpenCore,支持多種常用的音頻、視頻格式錄制和回放,編碼格

7、式包括MPEG4、MP3、H.264、AAC、ARM。SQLite 小型的關系型數據庫引擎OpenGL|ES 根據OpenGL ES 1.0API標準實現的3D繪圖函數庫FreeType 提供點陣字與向量字的描繪與顯示WebKit 一套網頁瀏覽器的軟件引擎SGL 底層的2D圖形渲染引擎SSL 在Andorid上通信過程中實現握手Libc 從BSD繼承來的標準C系統函數庫,專門為基于embedded linux的設備定制Android 運行時Android應用程序是采用Java語言編寫,程序在Android RunTime中執行,其運行時分為核心庫和Dalvik虛擬機兩部分。核心庫核心庫提供了J

8、ava語言API中的大多數功能,同時也包含了Android的一些核心API,如android.os、android.media等等。Dalvik虛擬機每個Android應用程序都有一個專有的進程,并且不是多個程序運行在一個虛擬機中,而是每個Android程序都有一個Dalivik虛擬機的實例,并在該實例中執行。Linux內核層內核層(Linux Kernel)Android的核心系統服務依賴于Linux內核,如內存管理、進程管理、電源管理以及安全性、網絡協議棧和驅動模型等。二.Android開發準備構建開發環境1:安裝JDK6以上選擇A:2:到http:/,下載Android的SDK Mana

9、ger,通過這個軟件來進行初次的Android的SDK下載和管理。安裝完SDK后,要把sdktools設置到path里面去。3:安裝Eclipse,最好安裝最新版4:安裝ADT插件,在插件安裝后,要設置SDK的位置,在windowpreferenceandroid選項里面,右邊有一個SDK Location的配置。5:創建Android虛擬設備,也就是AVD,在windowAndroid SDK and AVD Manager里面創建一個新的AVD。選擇B:到http:/,可以直接下載一個google幫你集成好的Eclipse,進行快速開發。分享:http:/ 提取碼: Uv5fCQaYAnd

10、roid模擬器Android模擬器Android SDK自帶一個移動模擬器。它是一個可以運行在你電腦上的虛擬設備運行在你電腦上的虛擬設備。 Android模擬器可以讓你不需使用物理設備即可預覽、開發和測試Android應用程序。Android模擬器新建:( *百度:eclipse android模擬器創建)常見的api包說明1:android.app :提供高層的程序模型、提供基本的運行環境2:android.content :包含各種的對設備上的數據進行訪問和發布的類3:android.database :通過內容提供者瀏覽和操作數據庫4:android.graphics :底層的圖形庫,包

11、含畫布,顏色過濾,點,矩形,可以將他們直接繪制到屏幕上.5:android.location :定位和相關服務的類6:android.media :提供一些類管理多種音頻、視頻的媒體接口7: :提供幫助網絡訪問的類,超過通常的.* 接口8:android.os :提供了系統服務、消息傳輸、IPC 機制9:android.opengl :提供OpenGL 的工具10:vider :提供類訪問Android 的內容提供者11:android.telephony :提供與撥打電話相關的API 交互12:android.view :提供基礎的用戶界面接口框架13:android.

12、util :涉及工具性的方法,例如時間日期的操作14:android.webkit :默認瀏覽器操作接口15:android.widget :包含各種UI 元素(大部分是可見的)在應用程序的屏幕中使用Android工程項目的目錄結構1:assets :存放原生文件,這個目錄保存的文件可以打包在程序里。和res的不同點是,android不為assets下的文件生成ID,如果使用assets下的文件,需要指定文件的路徑和文件名。2:bin : Java編譯輸出的路徑3:gen :存放android編譯資源文件自動生成的R文件。4:res :存放程序所需要的資源文件,也就是非Java的文件。常見的目

13、錄有:(1)res/animator/ :XML文件,定義動畫屬性(2)res/anim/ :XML文件,它們被編譯進逐幀動畫(frame by frameanimation)或補間動畫 (tweened animation)對象(3)res/color/:XML文件,定義顏色狀態的列表(4)res/layout/:存放被編譯為屏幕布局:存放被編譯為屏幕布局(或屏幕的一部分或屏幕的一部分)的的XML文件文件(5)res/menu/:XML文件,用來定義應用的菜單(6)res/drawable/:存放圖片文件,如.png, .9.png, .jpg, .gif等。放在這里的圖像資源可能會被aap

14、t(android assert packaging tool,android資源 工具)自動地進行無損壓縮優化。如果你不想圖片被壓縮改變,請把圖像文件放在 res/raw/目錄下,這樣可以避免被自動優化。(7)res/raw/:直接復制到設備中的任意文件,它們無需編譯(8)res/values/:存放可以被編譯成很多種類型的資源文件, XML 格式的。常見的文件有: array.xml :定義數組 colors.xml :定義color drawable和顏色的字符串值。 dimens.xml 定義尺寸值(dimension value)。 strings.xml 定義字符串(string)

15、值。 styles.xml定義樣式(style)對象。(9)res/xml/:任意的XML文件,在運行時可通過調用Resources.getXML()讀取。5:src : 存放Java源代碼三.Android入門基礎常用Widgets 常用的WidgetsTextView、(文本框)Button、 (按鈕)EditText、(編輯文本框)CheckBox、(多選框)RadioGroup、(單選組)RadioButton、(單選按鈕框)Spinner、(下拉框)ProgressBar、(進度條框)ImageView、(圖片)Date Picker、(日期選擇)Time Picker、(時間選擇)

16、Rating Bar、(等級)ListView、(列表)Action Bar、(頂部)Dialogs、(彈出層)Notifications、(通知欄)Android開發之五大布局 Xml是Android主流的靈活布局規范: 為了適應各式各樣的界面風格,Android系統提供了5種布局,這5種布局分別是: LinearLayout(線性布局):在一個方向上(垂直或水平)對齊所有子元素,一個垂直列表每行將只有一個子元素(無論它們有多寬)一個水平列表只是一列的高度(最高子元素的高度來填充).RelativeLayout(相對布局):相對布局的子控件會根據它們所設置的參照控件和參數進行相對布局。參照控

17、件可以是父控件,也可以是其它子控件,但是被參照的控件必須要在參照它的控件之前定義. TableLayout(表格布局):把子元素放入到行與列中,不顯示行、列或是單元格邊界線單元格不能橫跨行,如HTML中一樣. AbsoluteLayout(絕對布局):絕對布局的子控件需要指定相對于此坐標布局的橫縱坐標值,否則將會像框架布局那樣被排在左上角(不能適應不同的屏幕大小).FrameLayout(框架布局):框架布局是最簡單的布局形式。所有添加到這個布局中的視圖都以層疊的方式顯示。第一個添加的控件被放在最底層,最后一個添加到框架布局中的視圖顯示在最頂層,上一層的控件會覆蓋下一層的控件。利用這五種布局,

18、可以在屏幕上將控件隨心所欲的擺放,而且控件的大小和位置會隨著屏幕大小的變化作出相應的調整。下面是這五個布局在View的繼承體系中的關系:重點之:線性布局效果圖:XML屬性:android:baselineAligned:是否允許用戶調整它內容的基線。android:baselineAlignedChildIndex:當一個線性布局與另一個布局是按基線對齊的一部分,它可以指定其內容的基線對齊方式。android:gravity:指定如何在該對象中放置此對象的內容。 eg:android:gravity=“center”,來讓EditText中的文字在EditText組件中居中顯示。 androi

19、d:layout_gravity=“right”,來讓EditText組件在LinearLayout中居右顯示。android:orientation:設置它內容的對其方向(橫向/豎向)。 eg:android:orientation=“vertical”,垂直布局顯示。 android:orientation=“horizontal”,水平布局顯示。效果圖:重點之:相對布局下面介紹一下RelativeLayout用到的一些重要的屬性:第一類:屬性值為true或falseandroid:layout_centerHrizontal 水平居中android:layout_centerVertic

20、al 垂直居中android:layout_centerInparent 相對于父元素完全居中android:layout_alignParentBottom 貼緊父元素的下邊緣android:layout_alignParentLeft 貼緊父元素的左邊緣android:layout_alignParentRight 貼緊父元素的右邊緣android:layout_alignParentTop 貼緊父元素的上邊緣android:layout_alignWithParentIfMissing 如果對應的兄弟元素找不到的話就以父元素做參照物第二類:屬性值必須為id的引用名“id/id-name”

21、android:layout_below 在某元素的下方android:layout_above 在某元素的的上方android:layout_toLeftOf 在某元素的左邊android:layout_toRightOf 在某元素的右邊android:layout_alignTop 本元素的上邊緣和某元素的的上邊緣對齊android:layout_alignLeft 本元素的左邊緣和某元素的的左邊緣對齊android:layout_alignBottom 本元素的下邊緣和某元素的的下邊緣對齊android:layout_alignRight 本元素的右邊緣和某元素的的右邊緣對齊第三類:屬性

22、值為具體的像素值,如30dip,40pxandroid:layout_marginBottom 離某元素底邊緣的距離android:layout_marginLeft 離某元素左邊緣的距離android:layout_marginRight 離某元素右邊緣的距離android:layout_marginTop 離某元素上邊緣的距離四.Android之HelloWorld功能需求:在在Android平臺點擊一個按鈕,切換下一個畫面平臺點擊一個按鈕,切換下一個畫面.實現效果圖: A圖布局(activity_main.xml和MainActivity.java )B圖布局(activity_test

23、.xml和TestActivity.java )清單AndroidManifest.xml資源strings.xml將Android開發項目打包成APK,即可.至此,一個神秘的Android應用就開發完成了。五.Android之重點基礎項目的清單文件AndroidManifest.xml這個清單給這個清單給Android系統提供了關于這個系統提供了關于這個應用程序的基本信息應用程序的基本信息,系統在能運行任何程,系統在能運行任何程序代碼之前必須知些信息。序代碼之前必須知些信息。 AndroidManifest.xml主要包含以下功能:(1)命名應用程序的 Java 包,這個包名用來唯一標識應用

24、程序(2)描述應用程序的組件:活動,服務,廣播接收者,以及組成應用程序的內容提 供器;對實現每個組件和公布其能力(比如,能處理哪些意圖消息)的類進行命 名。這些聲明使得 Android系統了解這些組件以及在什么條件下可以被啟動;(3)決定應用程序組件運行在哪個進程里面(4)聲明應用程序所必須具備的權限,用以訪問受保護的部分 API,以及和其它應 用程序交互;(5)聲明應用程序其他的必備權限,用以組件之間的交互;(6)列舉測試設備Instrumentation類,用來提供應用程序運行時所需的環境配置 和其他信息,這些聲明只是在開發和測試階段存在,發布前將被刪除(7) 聲明應用程序所要求的Andr

25、oid API的最低版本級別;(8)列舉application所需要鏈接的庫應用、任務、進程和線程應用: 一個Android 包 (簡稱 .apk ) ,里面包含應用程序的代碼以及資源。這是一個應用發布,用戶能下載并安裝到他們設備上的文件。任務: 其實就是一次運行起來的一個活動棧,通常用戶能當它為一個“應用程序”來啟動和操作。進程: 一個應用通常會對應到一個進程,注意,不是一次運行一個進程,跟windows不一樣,只要進程沒有銷毀,那么無論你啟動幾回這個任務,都可能是在一個進程里。線程: 任務、活動等的實際運行環境,每個進程包含一個或多個線程。多數情況下,Android 避免在進程里創建多余的

26、線程,除非它創建它自己的線程,我們應保持應用程序的單線程性,也就是運行在主線程里面。進程的生命周期在大多數情況下,每個Android應用程序都運行在自己的Linux進程中,當應用程序的某些代碼需要運行時,這個進程就被創建并一直運行下去,直到系統認為該進程不再有用為止,然后系統將回收進程占用的內存以便分配給其它的應用程序。 Android會盡可能長時間的為應用程序維持進程。1:前臺(Foreground)進程,與用戶當前正在做的事情密切相關。不同的應用程序 組件能夠通過不同的方法使它的宿主進程移到前臺。當下面任何一個條件滿足 時,可以考慮將進程移到前臺:(1)進程正在運行一個與用戶交互的Acti

27、vity ,它的onResume()方法被調用(2)進程有一個Service,該Service對應的Activity正在與用戶交互(3)進程有一個Service被調用startForeground()方法,要求到前臺來執行(4)進程有一個Service,并且在Service的某個回調函數(onCreate()、 onStart()、 或 onDestroy())內有正在執行的代碼。(5)進程有一正在運行的BroadcastReceiver,它的onReceive()方法正在執行2:可見(visible)進程,它有一個可以被用戶從屏幕上看到的Activity,但不在前 臺,它的onPause()

28、方法被調用。這樣的進程一般不允許被殺死,除非為了保證 前臺進程的運行不得不這樣做。3:服務(service)進程,有一個已經用startService() 方法啟動的Service。雖然這 些進程用戶無法直接看到,但它們做的事情卻是用戶所關心的(例如后臺MP3播 放、后臺數據上傳下載等)。因此,系統將一直運行這些進程除非內存不足以維 持所有的前臺進程和可見進程。4:后臺(background)進程, 擁有一個當前用戶看不到的Activity(它的onStop()方法被調用)。這些進程對用戶體驗沒有直接的影響。如果它們正確執行了Activity生命期,系統可以在任意時刻殺死進程來回收內存,并提供

29、給前面三種類 型的進程使用。5:空(empty)進程,不包含任何處于活動狀態的應用程序組件。保留這種進程的唯一原因是,當下次應用程序的某個組件需要運行時,不需要重新創建進程,這樣可以提高啟動速度。Android中的線程概述1:當一個Android應用被裝載執行的時候,系統會創建一個線程來運行這個應用, 通常稱之為主線程“main thread”,也被稱為UI Thread。2:系統不會為每個組件單獨創建線程,在同一個進程里的UI組件都會在UI線程里實例化,系統對每一個組件的調用都從UI線程分發出去。結果就是,響應系統回調的方法(比如響應用戶動作的onKeyDown()和各種生命周期回調)永遠都

30、是在UI線程里運行。3:Andoid UI toolkit并不是線程安全的,所以你不能從非UI線程來操縱UI組件。你必須把所有的UI操作放在UI線程里。4:如果所有的工作都在UI線程,做一些比較耗時的工作比如訪問網絡或者數據庫查詢,都會阻塞UI線程,導致事件停止分發(包括繪制事件)5:因此建議,Android的單線程模型單線程模型有兩條原則:(1)不要阻塞UI Thread(2)不要在UI Thread之外訪問Android 的UI toolkit (主要是android.widget and android.view) 子線程不能操作UI對象。6:如果有長時間的處理,比如要裝載一個大的圖片,

31、就需要開啟一個單獨的線程來裝載,通常稱之為Worker Thread。UI線程和非UI線程 通信處理非UI線程和UI線程之間通信實現?Android的線程使用來更新UI:Thread、Handler、Looper、TimerTask等教程:http:/ Handler允許你發送消息到一個線程的消息隊列,并處理消息。 Handler和啟動它的主線程是運行在同一個線程中的。主線程通過Handler來調度處理消息,相實現了異步處理。Handler應用的地方:1:安排消息或Runnable 在某個主線程中某個地方執行2:安排一個動作在不同的線程中執行,這個要使用HandlerThreadHandler

32、使用:1:創建Handler對象,實現handleMessage方法2:創建Runnable對象,在run方法里面進行消息的發送3:在主線程中啟動Handler,使用post方法或其它類似方法4:在主線程中取消Handler,使用removeCallbacks方法或其它類似方法子線程:子線程和UI線程:1.handler可以在任意線程發送消息任意線程發送消息,這些消息會被添加到關聯的MQ上。2.handler是在它關聯的關聯的looper線程中處理消息線程中處理消息的。3.解決了android最經典的不能在其他非主線程中更新UI的問題Handler h = new Handler() publ

33、ic void handleMessage(Message msg) super.handleMessage(msg); /使用what來區分是什么樣的消息 switch (msg.what) case 1 : /這里進行消息的處理 break; default : /這里進行消息的處理 ;int what = 0;Runnable r = new Runnable() public void run() Message msg = h.obtainMessage(); msg.obj = 1234567;/傳遞的參數 msg.what = what; what+; h.sendMessage

34、(msg); h.postDelayed(r, 1000L); ;Intent基本概念Intent是什么 是一個簡單的消息對象(消息傳遞工具類),它表示程序想做某事的“意圖”,可以用來”激活”Activity、Service或BroadCast Receiver。比如想要從一個Activity啟動另外一個Activity,就可以這么寫:Button btnToT2 = (Button)this.findViewById(R.id.btn_toT2);btnToT2.setOnClickListener(new OnClickListener() public void onClick(View

35、 v) Intent in = new Intent(); in.setClass(HelloWorldActivity.this, T2.class); HelloWorldActivity.this.startActivity(in); );Intent對象能包含下面六種數據:1:Component name,組件名稱:來處理Intent的組件類的全路徑名稱。可以通過setComponent()、setClass()、setClassName()方法來進行設置,通過getComponent()方法進行讀取。2:Action,動作:一個描述要做什么事情的字符串。在Intent類里面預定義了。

36、3:Data,數據:用來描述Action對應的具體的數據和數據的MIME Type,比如要打電話,那是電話數據的uri,通常是“tel:/”后面加上號碼。如果是其他的數據,通常是“content:/”類型的uri。相應的setData()方法僅僅用來設置URI,而setType()方法僅僅設置MIMEType,setDataAndType()可以同時設置,另外可以通過相應的get方法獲取值。4:Category,類別:用來描述組件應該如何處理Intent的附加信息。在Intent類中有Category具體的預定義。可以通過addCategory()、removeCategory()和getCa

37、tegories()來操作Category。5:Extras,額外數據:傳遞給組件的附加數據,通常是key-value對。可以通過putExtras()和getExtras()方法來操作數據。6:Flags,標記:各種各樣的類別標記,用來描述如何裝載Activity,以及裝載后如何處理這些Activity。Intent基本示例:發短信的示例:Uri uri = Uri.parse(“smsto:發送的號碼);Intent in = new Intent(Intent.ACTION_SENDTO,uri);in.putExtra(sms_body, 發個短信玩);Hello.this.start

38、Activity(in);打電話的示例:Uri uri = Uri.parse(“tel:發送的號碼);Intent in = new Intent(Intent.ACTION_CALL,uri);Hello.this.startActivity(in);記得在AndroidManifest.xml文件中進行授權,這些權限可以在Manifest.permission里面查到。一些常用的Intent: (Intent大全: http:/ Intent.ACTION_VIEW打開地圖應用程序并顯示指定的經緯度geo:0,0?q=street+address Intent.ACTION_VIEW打開

39、地圖應用程序并顯示指定的地址http:/web_address Intent.ACTION_VIEW打開瀏覽器程序并顯示指定的URLhttps:/web_address Intent.ACTION_VIEW打開瀏覽器程序并顯示指定的URLtel:phone_numberIn tent.ACTION_CALL打開電話應用程序并撥打指定的電話號碼tel:phone_number Intent.ACTION_DIAL打開電話應用程序并撥下指定的電話號碼voicemail: Intent.ACTION_DIAL打開電話應用程序并撥下指定語音郵箱的電話號碼plain_text Intent.ACTION

40、_WEB_SEARCH打開瀏覽器程序并使用Google搜索引擎搜索六.Android之核心基礎Android應用之四大組件Android應用中最主要的組件是:1:Activity:活動,活動是最基本的Andorid應用程序組件,應用程序中,一個活動通常就是一個單獨的屏幕。2:Service:服務,服務是運行在后臺的,通常是具有一段較長生命周期且沒有用戶界面的程序。比較好的一個例子就是播放歌曲的媒體播放器,就算你導航到其它屏幕時音樂也還是在播放。3:Content provider:內容提供者,內容提供者實現了一組標準的方法,從而能夠讓不同的應用之間可以相互保存或讀取彼此的內容,當然都需要實現自

41、己的內容提供器。4:Broadcast receiver:廣播接收者,你可以使用BroadcastReceiver來讓你的應用對一個外部的事件做出響應。比如:當電話呼入時,數據網絡可用時。1.組件Activity篇Activity基本概念Activity是什么? Activity是Android的一種應用組件,用來提供與用戶交互的屏幕Activity提供一個Window來繪制用戶界面,通常一個Activity就是我們見到的一個應用程序的界面。Activity能干什么? 要注意一點,Activity只是提供View組件繪制的環境,它本身并不會繪制界面,因此,Activity主要用來:1:提供Vi

42、ew組件的環境,由多個View組和構成一個應用程序的界面。2:用來處理View組件的事件響應,可以在里面寫界面的邏輯處理代碼。3 : 注注:作為資源的一部分,通過LayoutInflater這個類將xml布局文件加載并顯示成對應視圖。解析xml文件需要用到的方法有LayoutInflater的靜態方法from來獲取一LayoutInflater實例inflater,再通過inflater的inflate方法返回一個視圖實例,最后通過setContentView的方法把這個視圖實例加載出來。 Activity創建、啟動、使用和銷毀?Android界面繪制過程看不懂,感覺很復雜!亮點亮點從上圖,我

43、們可以理出大致的顯示過程如下:【1】ActivityManagerService創建Activity線程,激活一個activity。【2】系統調用Instrumentation.newActivity創建一個activity。【3】Activity創建后,attach到一個新創建的phonewindow中。這樣Activity獲取一個唯一的WindowManager服務的實例。【4】Activity創建過程中使用setcontentView設置用用戶UI,這些VIEW被加入到PhoneWindow的ContentParent中。【5】Activity線程繼續執行,當執行到Activity.ma

44、keVisible是將根view DecoView加入到WindowManger中,WindowManger實全會為每個DecoView創建對應的ViewRoot。【6】每個ViewRoot擁有一個Surface,每個Surface將會調用底層庫創建圖形繪制的內存空間。這個底層庫就是SurfaceFlinger。SurfaceFlinger同時也負責將個同時也負責將個View繪制的圖形合到一塊繪制的圖形合到一塊(按照Z軸)顯示到用戶屏幕。【7】如果用戶直接在Canvas上繪制,實際上它直接操作Surface。但對每個View的變更,它是要通知到ViewRoot,然后ViewRoot獲取Canv

45、as。如果繪制完成,surfaceFlinger得到通知,合并Surface成一個Surface到設備屏幕。Activity視圖View視圖View 視圖(Views)是可以將其自身繪制到屏幕上的對象。Android的用戶界面是由一系列的視圖樹構成,接口都是由一組以樹的形式出現的視圖組成的。開發者可以通過創建一個新的視圖的方法來使用自定義的圖形處理技術,比如開發游戲,或者是使用 用戶圖形窗口界面widget。視圖組Viewsgroups 視圖組是一種特殊類型的視圖對象,它的功能是包含和管理下級試圖和其它視圖組的集合。視圖組讓你可以為你的用戶界面添加結構,從而建立復雜并可以作為單獨實體進行訪問的

46、屏幕元素。Activity和View Android應用程序最基本的功能單位是Activity,主要用來實現界面的功能處理,但是它本身并不能使自己顯示在屏幕上。你可以使用視圖views和視圖組viewgroups,它們是Android平臺上的最基本的用戶界面元素。Activity的生命周期圖Activity的回調方法 onCreate() :在Activity第一次被創建的時候調用,通常在這里做一些靜態初始化的工 作,比如:創建views、綁定數據到列表等。這個方法會把這個Activity上一次運行所保存的狀態傳遞進來。onStart() : 在Activity變得可以被用戶看見之前調用。on

47、Restart() :在Activity被stop后,重新變得可見的時候調用。onResume(): 在Activity可見,能跟用戶進行交互的時候調用。這時候,當前Activity來到Activity棧的頂端,用戶就可以操作這個Activity了。onPause():在系統準備resume其他的Activity的時候調用。這個方法里面通常可以實現:提交未保存的數據,終止動畫等。onStop():當Activity不可見的時候調用這個方法。onDestroy():調用finish方法,或是系統判斷,需要銷毀這個Activity的時候調用。 思考? 如何創建應用界面?2.組件Service篇Se

48、rvice基本概念Service是什么?是一種能在后臺運行,不需要用戶界面,用來執行需要長時間處理的組件。Service的說明?1:它通常由其他組件啟動,并在后臺持久的運行,即使用戶已經切換到其他的應用,它仍然可以繼續在后臺運行。2:其他組件能夠跟service綁定,甚至能進行跨進程的通訊(IPC:interprocess communication)3:一個service通常用來執行:網絡傳輸、音樂播放、文件I/O、或者是與content provider進行交互等等。當然所有的操作過程都在background。Service和進程、線程Service和進程、線程? 要注意一點:一個Serv

49、ice是運行在主線程和它的宿主進程中的,Service不會創建它自己的線程,也不會運行在單獨的進程中。 因此,如果Service要執行特別耗費CPU的工作,或者是其他導致阻工作,最好在Service里面創建新的線程來執行這些工作,這樣能避免典型的ANR(Application Not Response)錯誤。Service和線程的使用建議?1:Service適用于在后臺運行,不需要用戶在界面上操作的功能。2:Thread適用于你希望在應用之外執行一些功能,而且用戶還需要操作界面,那么建議使用Thread;3:還有一種情況就是Service里面執行的工作特別耗費資源,容易引起主線程的阻塞,那么也

50、建議使用線程。Service的兩種形式1:Started 如果是其他應用組件通過調用startService()方法啟動的service,就被稱“Started” Service。 一旦啟動了Service,它就會在后臺運行,即使啟動它的組件已經被銷毀,Service仍然會繼續運行。一般這種啟動Service的操作是不需要返回值的,當Service完成工作后,它自己會停止運行。2:Bound 如果是其他應用組件通過調用bindService()方法綁定的service,就被稱為“bound” Service。 綁定Service提供了Client和Server之間的交互,也就是允許組件和Ser

51、vice進行交互,發送請求,獲得返回值等。甚至能夠實現跨進程的通訊(IPC)。 綁定Service和綁定它的組件的運行周期是一樣的,多個組件可以綁定到同一個Service,當所有綁定它的組件都銷毀了的時候,Service也就銷毀了,調用者退出了,就銷毀了。1. 生命周期:生命周期:startService()方式啟動,Service是通過接受Intent并且會經歷onCreate()和onStart()。當用戶在發出意圖使之銷毀時會經歷onDestroy(),而bindService()方式啟動,與Activity綁定的時候,會經歷onCreate()和onBind(),而當Activity被

52、銷毀的時候,Service會先調用onUnbind()然后是onDestroy()。2. 控制方式:控制方式:前者的控制方式需要使用固定的方法,對Service進行單一的操作。而后者由于與Activity綁定,不用考慮其生命周期問題,并且從發送Intent的被動操作,變為可以主動對Service對象進行操作,我們甚至可以建立一個Handler類,對Service進行相關的操作。大大加強了Service的靈活性、可操作性。Service的生命周期Service基本的APIA:創建創建Service非常簡單,繼承Service,然后覆蓋實現相應的回調方法即可,一些重要的回調方法如下:1:onSta

53、rtCommand():當其他組件啟動Service的時候調用。當這個方法執行后,Service就啟動起來在后臺運行了。你可以調用stopSelf()或stopService()來停止Service。如果只是綁定服務,沒有必要實現這個方法。2:onBind():當其他組件綁定Service的時候調用。你必須提供一個接口給客戶端,讓它通過這個接口來和服務端通訊,通常會返回一個IBinder,你應該始終實現該方法,如果不用綁定的話,返回null。3:onCreate():當Service第一次創建的時候由系統調用該方法。如果服務已經啟動運行,將不會調用該方法。4:onDestroy():當Serv

54、ice將要被銷毀的時候調用該方法。你應該實現該方法來釋放Service所使用的資源,比如:線程、注冊的監聽器、廣播消息接受者等。B:銷毀銷毀Service1:如果是通過其他組件調用startService()來創建的Service,需要調用stopSelf()或stopService()來停止Service2:如果是綁定的Service,它會一直運行到所有綁定它的組件銷毀后,由系統來銷毀Service。3:如果系統急需要資源,它會強行停止一些長時間運行,且運行級別較低的service,比如沒有界面,在后臺運行的某些service。 思考? 如何后臺下載圖片?3.組件Broadcast篇Broa

55、dcast基本概念Broadcast是什么? 是一種能在各個應用程序之間傳遞數據的機制。類似于現實中的廣播體系,有廣播方和接收方,雙方的關系是多對多的,之間傳遞的就是Intent對象。Broadcast能做什么?1:實現了不同的程序之間的數據傳輸與共享,比如我們的應用想要攔截到短信或電話,就可以接收相應的廣播,然后進行處理。2:起到了一個通知的作用,比如在service中要通知主程序,更新主程序的UI等。Broadcast有什么?1:廣播方,就是發出廣播的應用2:接收方,就是接收相應的廣播信息并處理的應用3:Intent對象,廣播方和接收方傳遞數據的對象。Broadcast Receiver示

56、例在廣播方需要做兩件事情:一是組織并封裝Intent對象;二是發送廣播。如下:Intent in = new Intent();in.setAction(Intent.ACTION_EDIT);in.putExtra(broadcast, test);HelloWorldActivity.this.sendBroadcast(in);在接收方需要繼承BroadcastReceiver并做廣播的相應處理public class MyReceiver extends BroadcastReceiver public void onReceive(Context context, Intent intent) if(intent.getAction().equals(Intent.ACTION_EDIT) Toast.makeText(context, receiver-+intent.getExtras().getString(broadcast), Toast.LENGTH_SHORT).show(); else Toast.makeText(context, receiver-but not edit,Toast.LENGTH_SHORT).show(); A:需要在配置文件AndroidMani

溫馨提示

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

評論

0/150

提交評論