




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第三章 Android應用程序的 控制機制Android應用開發教程第三章第三章 AndroidAndroid應用程序的控制機制應用程序的控制機制Android應用程序的界面應用程序的界面1應用程序的任務、進程和線程應用程序的任務、進程和線程2Android應用程序生命周期應用程序生命周期3Android組件間的通信組件間的通信4用戶界面狀態保存用戶界面狀態保存5Android應用開發教程AndroidAndroid應用程序的界面應用程序的界面v Android應用程序由下列組件組成:l Activityl Servicel Broadcast Receiverl Content Provid
2、erl v Activity組件l 是Android應用程序中使用頻率最高、最基本的組件。l 一個Activity就是一個單獨的屏幕窗口。l Activity中的內容在屏幕上的顯示稱作用戶界面(User Interface,即UI)。第三章第三章 Android應用程序的控制機制應用程序的控制機制Android應用開發教程AndroidAndroid應用程序的界面應用程序的界面v Activity組件l UI是實現在屏幕上進行顯示數據、選擇和輸入數據等操作的用戶交互窗口。l UI的布局(Layout)為Activity構造用戶界面的結構,定義各窗體控件的排列位置。l Android的UI元素u
3、View類:是所有可視化窗體控件的基類。uViewGroup類:是控件的容器。其下層子控件既可以是View,也可以是ViewGroup。uWidget是窗體控件的包,包含各種UI元素,大部分是可見的控件,如文本框、按鈕、列表框、圖片、進度條等。第三章第三章 Android應用程序的控制機制應用程序的控制機制Android應用開發教程AndroidAndroid應用程序的界面應用程序的界面v Activity組件l 每個布局都有一組布局參數,用于描述其內控件的分布屬性 。l Android界面布局設計有兩種方法:xml聲明法和程序代碼設計法。l xml聲明法:u應用程序的可視控件及其布局信息,由
4、xml文件定義聲明,此文件稱為布局文件。u每個Activity對應一個布局文件。u所有布局文件都存放在工程文件夾下的“reslayout”子文件夾內。l 通常使用xml聲明法定義布局,使用java代碼來控制Activity組件狀態、執行UI交互操作。第三章第三章 Android應用程序的控制機制應用程序的控制機制Android應用開發教程AndroidAndroid應用程序的界面應用程序的界面v Activity組件l Activity類的Java代碼文件存放在應用項目的“src”目錄的包內。l Activity類位于android.app包中,需要在java代碼的前面使用“import an
5、droid.app.Activity; ”。l Activity類通常需要重載的方法:uonCreate():初始化Activity。uonPause():離開一個Activity時,提交用戶所做的修改。l 一個activity可以啟動另外一個,甚至包括與它不在同一應用程序之中的activity。l 每一個Activity必須在Androidmanifest.xml文件中聲明。第三章第三章 Android應用程序的控制機制應用程序的控制機制Android應用開發教程AndroidAndroid應用程序的任務、進程和線程應用程序的任務、進程和線程v 任務l 組件的動態運行,有一個最與眾不同的概念
6、 - 任務l 任務(Task):u完成用戶的一個目的的所有Activity 。l 任務棧(Task Stack):u任務以一組棧的模式,將這些Activity組件聚集在一起的集合。uAndroid系統用一個任務棧來記錄一個任務。第三章第三章 Android應用程序的控制機制應用程序的控制機制Android應用開發教程AndroidAndroid應用程序的任務、進程和線程應用程序的任務、進程和線程v 任務l 以收發郵件任務為例:第三章第三章 Android應用程序的控制機制應用程序的控制機制事件事件TaskTask棧棧A:點擊Email應用,進入收件箱AB:選中一封郵件,點擊查看詳情A,BC:點
7、擊回復,開始寫新郵件A,B,CD:點擊選擇聯系人,進入選擇聯系人界面A,B,C,DC:選擇好了聯系人后,繼續寫郵件A,B,CB:寫好郵件,發送完成,回到原始郵件A,BA:點擊返回,回到收件箱A退出EmailNullAndroid應用開發教程AndroidAndroid應用程序的任務、進程和線程應用程序的任務、進程和線程v 進程l 進程是低級核心處理過程,用于運行應用程序代碼。l 在Android操作系統中,進程完全是應用程序的具體實現。l 組件運行的進程由Androidmanifest文件控制。u組件標簽, , 和包含一個process屬性,這個屬性可以設置組件運行的進程。u標簽也包含proc
8、ess屬性,用來設置程序中所有組件的默認進程。u所有的組件在默認進程的主線程中實例化,系統對這些組件的調用從主線程中分離。第三章第三章 Android應用程序的控制機制應用程序的控制機制Android應用開發教程AndroidAndroid應用程序的任務、進程和線程應用程序的任務、進程和線程v 進程分類l 前臺進程:正在前臺運行的進程。u前臺進程是必須的用戶操作。u前臺進程包括:p正運行著的,與用戶交互的Activity。p正運行著的Activity所使用的一個Service。p服務。正在執行回調方法(如onStart()、onCreate()或 onDestroy()的Service對象。
9、p正在執行onReceive()方法的BroadcastReceiver對象。u一般情況下,前臺進程不會被“殺死”。第三章第三章 Android應用程序的控制機制應用程序的控制機制空進程后臺進程服務進程可見進程前臺進程重要不重要Android應用開發教程AndroidAndroid應用程序的任務、進程和線程應用程序的任務、進程和線程v 進程分類l 可見進程:在屏幕中顯示,但用戶沒有直接與之進行交互。u可見進程為用戶在屏幕上可見但不能與用戶進行交互的進程。u可見進程包括:p一個不在前臺但為用戶可見的Activity(如在調用了方法onPayse() 之后)。p一個可視的Activity所綁定的S
10、ervice。u可見進程很重要,不到極端情況(如無法維持前臺進程運行時),不會“銷毀”可見進程。第三章第三章 Android應用程序的控制機制應用程序的控制機制Android應用開發教程AndroidAndroid應用程序的任務、進程和線程應用程序的任務、進程和線程v 進程分類l 服務進程:不可見,在后臺為用戶服務; 一般不會被中斷。u服務進程包括:p一個由startService()方法啟動的Service。p支持正在處理的不需要可見界面運行的Service。u因為服務不是直接和用戶打交道,它的優先級稍低于可見的活動。系統會盡量維持它們的運行,除非系統內存不足以維持前臺進程和可見進程的運行需
11、要。第三章第三章 Android應用程序的控制機制應用程序的控制機制Android應用開發教程AndroidAndroid應用程序的任務、進程和線程應用程序的任務、進程和線程v 進程分類l 后臺進程:對用戶作用不大,可能會被系統中止。u后臺進程包括:p目前不可見的Activity(即已調用了onStop()方法)。p目前沒有服務的Service。u在一般情況下會有大量的后臺進程,Android將會使用last-seen-first-killed模式來“殺死”進程來為前臺進程獲得資源。第三章第三章 Android應用程序的控制機制應用程序的控制機制Android應用開發教程AndroidAndr
12、oid應用程序的任務、進程和線程應用程序的任務、進程和線程v 進程分類l 空進程:對用戶沒有任何作用,是首先被中止的進程。u為了改善系統的整體性能, Android通常在內存中保留生命周期結束了的應用。uAndroid使用這種緩存機制能夠減少應用程序在再次啟動時所需的啟動時間。這些過程通常根據需要被殺死。第三章第三章 Android應用程序的控制機制應用程序的控制機制Android應用開發教程AndroidAndroid應用程序的任務、進程和線程應用程序的任務、進程和線程v 線程l 每個進程有一到多個線程運行在其中。l 進程中的所有組件都在UI線程中實例化,以保證應用程序是單線程的。l 線程通
13、過java的標準對象Thread 創建。l 永遠要記住:u不要阻塞UI線程!如果在UI線程中執行阻塞或者耗時操作會導致UI線程無法響應用戶請求。u不能在非UI線程(也稱為工作線程)中更新UI!這是因為android的UI控件都是線程不安全的。第三章第三章 Android應用程序的控制機制應用程序的控制機制Android應用開發教程Android Android 應用程序生命周期應用程序生命周期v 應用程序生命周期:l 應用程序生命周期指從創建到結束的全過程。l Android 應用程序的生命周期是由Android 框架進行管理,而不是由應用程序直接控制。u每個應用的內存和進程都是由進行時獨立管
14、理的。u每個Android的應用程序在自己的進程中運行。l 應用程序組件有其生命周期:由Android初始化它們,以相應Intent響應意圖,直到結束,實例被銷毀。l Activity類是Android應用生命周期的重要部分之一。第三章第三章 Android應用程序的控制機制應用程序的控制機制Android應用開發教程Android Android 應用程序生命周期應用程序生命周期v Activity的生命周期:l Activity被一個Activity棧管理。堆棧中保存對象的實例,在一個任務中可能存在多個同一Activity的實例。l 生命周期中的五種狀態:啟動,運行,暫停,停止,銷毀。u啟
15、動:Activity被壓入棧頂。u運行:Activity可見并獲得焦點,與用戶進行交互。u暫停:Activity可見但失去焦點。u停止:Activity被另一個Activity完全覆蓋,不可見,系統可以隨時將其釋放。u銷毀:系統將Activity從內存中刪除,Activity被彈出出棧。第三章第三章 Android應用程序的控制機制應用程序的控制機制Android應用開發教程Android Android 應用程序生命周期應用程序生命周期運行狀態暫停狀態停止狀態銷毀狀態被被Dialog或者透明或者透明的的Activity覆蓋覆蓋被另一個被另一個Activity覆蓋,不可見覆蓋,不可見系統內存嚴
16、重系統內存嚴重不足,被回收不足,被回收系統內存不足,系統內存不足,被回收被回收被覆蓋的被覆蓋的Activity返回返回被重新激被重新激活活發生異常或其它情況Activity新實例啟動第三章第三章 Android應用程序的控制機制應用程序的控制機制v Activity的生命周期狀態轉變Android應用開發教程Android Android 應用程序生命周期應用程序生命周期v Activity 生命周期事件處理函數生命周期事件處理函數 l onCreate(Bundle):u首先創建時調用該方法。u執行一次性的初始化工作。u提供Bundle參數p如果Activity之前是被凍結狀態,其狀態由Bu
17、ndle提供。p接受參數為null或由onSaveInstanceState()方法保存的狀態信息。u其后調用onStart()或onRestart()方法。 l onStart():u當Activity對用戶即將可見時調用。l onResume():u用戶可以開始與活動進行交互時會調用該方法。第三章第三章 Android應用程序的控制機制應用程序的控制機制Android應用開發教程Android Android 應用程序生命周期應用程序生命周期v Activity 生命周期事件處理函數生命周期事件處理函數 l onPause():u活動將進入后臺時會運行該方法。l onStop():u在一段
18、時間內不需要某個活動時,調用該方法。l onRestart():u將已處于停止狀態的活動重新顯示給用戶。l onDestroy():u銷毀活動前調用該方法。u如果內存不足,系統會終止進程,可能不需要調用該方法。第三章第三章 Android應用程序的控制機制應用程序的控制機制Android應用開發教程Android Android 應用程序生命周期應用程序生命周期v Activity 生命周期事件處理函數生命周期事件處理函數 l onSaveInstanceState(Bundle):u調用該方法讓活動可以保存每個實例的狀態。l onRestoreInstanceState(Bundle):u使
19、用onSaveInstanceState()方法保存的狀態來重新初始化某個活動時調用該方法。第三章第三章 Android應用程序的控制機制應用程序的控制機制Android應用開發教程Android Android 應用程序生命周期應用程序生命周期(“*”號表示可選)號表示可選)第三章第三章 Android應用程序的控制機制應用程序的控制機制v Activity 生命周期生命周期中函數的調用過程中函數的調用過程Android應用開發教程Android Android 應用程序生命周期應用程序生命周期v 生命周期函數調用舉例之一生命周期函數調用舉例之一l 有兩個界面Activity A和Activ
20、ity B。l 先啟動第一個界面Activity A,方法回調的次序是: l Activity A不關閉,跳轉第二個Activity B,方法回調的次序是:onCreate(A)onStart(A)onResume(A)onFreeze(A)onPause(A)onCreate(B)onStart(B)onResume(B)onStop(A)第三章第三章 Android應用程序的控制機制應用程序的控制機制Android應用開發教程Android Android 應用程序生命周期應用程序生命周期v 生命周期函數調用舉例之二生命周期函數調用舉例之二l 在點擊back回到第一個界面,這時方法回調的次
21、序是:l 在點擊Exit退出應用時,方法回調的次序是:onStop(B)onDestroy(B)onPause(A)onStop(A)onDestroy(A)onPause(B)onRestart(A)onStart(A)onResume(A)onActivityforResult(A)第三章第三章 Android應用程序的控制機制應用程序的控制機制Android應用開發教程Android Android 組件間的通信組件間的通信v Intent對象對象l Intent是連接應用程序的三個核心組件Activity、Service和BroadcastReceiver的橋梁。l Intent負責對
22、應用中操作的動作、動作涉及數據及附加數據進行描述。l Intent本身是一個Intent類對象, Intent類都定義在android.content.Intent中。l 一個Intent對象其實就是信息的捆綁。l Intent對象由組件名稱、Action、Data、Category、Extra及Flag六部分組成。第三章第三章 Android應用程序的控制機制應用程序的控制機制Android應用開發教程Android Android 組件間的通信組件間的通信v Intent對象對象l 組件名稱:要處理該Intent的組件名稱。u設置組件名,該intent對象將被傳遞給組件名指定的類。u如果省
23、略組件名,則在Androidmanifest中,通過使用IntentFilter 來找與Intent最合適的組件。usetComponent()方法:設置組件名。ugetComponent()方法:讀取組件名。l 行動(Action):一個字符串,用于命名要采取的行動。第三章第三章 Android應用程序的控制機制應用程序的控制機制常量含義CALL_ACTION初始化一個電話呼叫EDIT_ACTION顯示數據給用戶進行編輯MAIN_ACTION啟動一個任務的起始Activity,沒有數據輸入和返回BATTERY_LOW_ACTION提示電池電量低SCREEN_ON_ACTION屏幕已開啟And
24、roid應用開發教程Android Android 組件間的通信組件間的通信v Intent對象對象l 數據(Data):u執行動作要操作的數據,用指向數據的一個URI來表示。u例如,指向某聯系人的URI為:content:/contacts/1,以下是action/data對:第三章第三章 Android應用程序的控制機制應用程序的控制機制常量含義VIEW_ACTION content:/contacts/1顯示標識符為“1”的聯系人的詳細信息EDIT_ACTION content:/contacts/1編輯標識符為“1”的聯系人的詳細信息VIEW_ACTION content:/conta
25、cts/顯示所有聯系人的列表PICK_ACTION content:/contacts/顯示所有聯系人的列表,并返回選擇的聯系人信息Android應用開發教程Android Android 組件間的通信組件間的通信v Intent對象對象l 類別(category)u被執行動作的附加信息。l 數據類型(type)u強制指定數據的類型。l 附加信息(extras)u其他所有附加信息的集合。l 標志(flag)u指導Android系統啟動一個Activity以及Activity啟動后對其進行處理。第三章第三章 Android應用程序的控制機制應用程序的控制機制Android應用開發教程Androi
26、d Android 組件間的通信組件間的通信v Intent過濾器過濾器l Intent過濾器是在manifest文件中進行聲明。l 每當一個Activity要執行一個操作,就會創建一個Intent的對象。l Intent過濾器聲明所指定的組件支持的Intent值。l Intent過濾器使用子標簽來進行聲明。l 元素:uaction:組件支持的Intent action。ucategory:組件支持的Intent category。utype:組件支持的Intent type。u第三章第三章 Android應用程序的控制機制應用程序的控制機制Android應用開發教程Android Andro
27、id 組件間的通信組件間的通信v Intent過濾器解析過濾器解析 l SDK例程NotesList的AndroidManifest.xml u第一個Activity:第三章第三章 Android應用程序的控制機制應用程序的控制機制Android應用開發教程Android Android 組件間的通信組件間的通信v Intent過濾器解析過濾器解析 l SDK例程NotesList的AndroidManifest.xml u第二個Activity:第三章第三章 Android應用程序的控制機制應用程序的控制機制Android應用開發教程Android Android 組件間的通信組件間的通信v
28、 Intent過濾器解析過濾器解析 l SDK例程NotesList的AndroidManifest.xml u第三個Activity:第三章第三章 Android應用程序的控制機制應用程序的控制機制Android應用開發教程Android Android 組件間的通信組件間的通信v 實例1 - Intent使用案例l 有兩個Activity:ActivityMain和ActivitySub。uActivityMain為首次進行的Activity;u使用單擊按鈕來實現兩個Activity的相互跳轉;u使用Intent對象實現兩個Activity之間的數據傳遞;u在標題欄顯示當前信息。l 項目u
29、項目名為:Activity_Intentu包名為:.sgmsc.Activity_IntentuActivityMain的布局文件為:main.xmluActivityMain的java代碼文件為:ActivityMain.javauActivitySub的布局文件為:subactivity.xmluActivitySub的java代碼文件為:ActivitySub.java第三章第三章 Android應用程序的控制機制應用程序的控制機制Android應用開發教程Android Android 組件間的通信組件間的通信v main.xmll 使用線性布局l 定義一個按鈕u按鈕的id為“butt
30、on1”u按鈕顯示為“進入ActivitySub”第三章第三章 Android應用程序的控制機制應用程序的控制機制Android應用開發教程Android Android 組件間的通信組件間的通信v subactivity.xmll 使用線性布局l 定義一個按鈕u按鈕的id為“button2”u按鈕顯示為“返回ActivityMain”第三章第三章 Android應用程序的控制機制應用程序的控制機制Android應用開發教程Android Android 組件間的通信組件間的通信v ActivityMain.javal 加載相關信息l 聲明事件監聽、控件、常量第三章第三章 Android應用程
31、序的控制機制應用程序的控制機制Android應用開發教程Android Android 組件間的通信組件間的通信v 重載onCreate()方法l 創建listener1對象:u創建intent1對象,u使用putExtra()方法將一組名/值對添加到intent1中,為Bundle對象。u使用startActivityForResult()方法啟動intent1對象。第三章第三章 Android應用程序的控制機制應用程序的控制機制Android應用開發教程Android Android 組件間的通信組件間的通信v 重載onCreate()方法l 創建listener1對象;l 顯示main.
32、xml中的布局;l 獲得按鈕,并綁定一個單擊監聽 - setOnClickListener(listener1);l 使用setTitle()方法設置標題欄顯示內容。第三章第三章 Android應用程序的控制機制應用程序的控制機制Android應用開發教程Android Android 組件間的通信組件間的通信v 重載onActivityResult()方法l 自ActivitySub返回時調用此方法。l 當請求碼為“REQUEST_CODE”時,取回傳參數值。l 使用getExtra()方法從Bundle對象中獲取名/值對。l 使用getString()方法從Bundle對象中得到“stor
33、e”的值。第三章第三章 Android應用程序的控制機制應用程序的控制機制Android應用開發教程Android Android 組件間的通信組件間的通信v 在onClick()事件中l 創建Bundle對象l 使用putString()方法保存名/值對。第三章第三章 Android應用程序的控制機制應用程序的控制機制Android應用開發教程Android Android 組件間的通信組件間的通信v 在ActivitySub中,獲取來自ActivityMain中的值l 使用getIntent()方法返回啟動該Activity的intent對象(即intnet1)。l 使用getExtras
34、()方法返回添加到intent1的Bundle對象中的名/值對。第三章第三章 Android應用程序的控制機制應用程序的控制機制Android應用開發教程Android Android 組件間的通信組件間的通信v Manifest.xmll 聲明了兩個Activity。第三章第三章 Android應用程序的控制機制應用程序的控制機制Android應用開發教程用戶界面狀態保存用戶界面狀態保存v 界面狀態l 一個Activity被激活并運行,即為建立了一個Activity的實例。l Activity實例與用戶交互,產生界面狀態信息。如用戶所選取的值,光標的位置等。l 當Activity實例進入“暫
35、停”功“停止”狀態時,需要保存這些臨時的狀態信息。l 保存狀態信息的方法:uSharedPreferences對象。 uBundle對象。第三章第三章 Android應用程序的控制機制應用程序的控制機制Android應用開發教程用戶界面狀態保存用戶界面狀態保存v SharedPreferences對象l 每個Activity都有一個無名的SharedPreferences對象。l 其SharedPreferences對象的訪問權限是私有的。l SharedPreferences提供一種基于name/value形式的鍵值二元組的存儲方式。l SharedPreferences支持的數據類型有:u
36、StringuLonguFloatuIntegeruBooleanl getPreferences():獲取SharedPreferences對象。l 使用put.()方法保存鍵-值對。例如保存字符串型的使用putString()方法。第三章第三章 Android應用程序的控制機制應用程序的控制機制Android應用開發教程用戶界面狀態保存用戶界面狀態保存v 使用SharedPreferences對象的一般步驟l 獲得SharedPreferences對象。l 獲得SharedPreferences.Editor對象。l 使用put.()方法保存鍵-值對。l commit()方法進行提交。v 例,Activity的SharedPreferences對象讀寫代碼:Protected void saveActivityPre
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 山東省德州市躍華中學2025屆高三第二次聯考英語試卷含解析
- 職業技術學院旅游管理五年制專業人才培養方案
- 《哲學與文化》主觀題答題模板
- 汽車金融公司員工職業素養培養考核試卷
- 減速器原理與設計考核試卷
- 球類企業績效管理與激勵機制考核試卷
- 石棉與化工和能源行業考核試卷
- 海洋氣象服務在船舶設計與制造中的應用考核試卷
- 船舶安全檢查與輪渡運輸合規性考核試卷
- 煤炭批發市場發展現狀與趨勢分析研究考核試卷
- 2025購銷合同(電子產品)范文
- 基于全生命周期的綠色建筑成本影響因素研究
- 2025年普法知識競賽題庫及答案(共80題)
- 心力衰竭護理查房 課件
- 【課時練基礎作業】人教版四年級數學下冊第四單元《期中計算能力測試》(含答案)
- 面癱患者的中醫護理常規
- 樹木修剪合同協議
- 2025年蘭州市九年級診斷考試(一診)物理試卷
- 2025-2030開關電源行業市場發展分析及發展趨勢與投資戰略研究報告
- 【初中地理】西亞課件-2024-2025學年人教版(2024)七年級地理下冊
- 2024年4月27日福建省事業單位《綜合基礎知識》真題及答案
評論
0/150
提交評論