




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、應(yīng)用開發(fā)處理Android Framework四大元素Activities-管理應(yīng)用程序展示Servi-管理服務(wù)Broadcast receiversContent Provider-管理數(shù)據(jù)共享溝通的橋梁:ent2Activity多個Activity之間的關(guān)系startActivity(ent)ActivityBActivityA活動(Activities)和任務(wù)( Tasks) One activity can start another, includingone defined in a different application.AsynchronousActivityActivit
2、yMessage (ent)Context.startActivityNo return(ent)orActivity.startActivityForResultTo get some result(e.g. to get a photo)(ent, Request_Code)啟動新的Activity(一)通過startActivity(ent)方法打開新的Activity。在打開新的Activity前,ent可以決定是否為新的Activity傳遞參數(shù)。第一種:打開新的Activity,不傳遞參數(shù)public class MainActivity extendivity protected
3、void onCreate(Bundle savedInstane) .Button button =(Button) this.findViewById(R.id.button); button.setOnClickListener(new View.OnClickListener()/點擊該按鈕會打開一個新的Activitypublic void onClick(View v) /新建一個對象,第二個參數(shù)為你要打開的Activity類ent,第一個參數(shù)為當(dāng)前Activity類startActivity(newent(MainActivity.this, NewActivity.class)
4、;); 啟動新的Activity(二)第二種:打開新的Activity,傳遞參數(shù)public class MainActivity extendivity protected void onCreate(Bundle savedInstan.e) button.setOnClickListener(new View.OnClickListener()/點擊該按鈕會打開一個新的Activity public void onClick(View v) entBundent = newent(MainActivity.this, NewActivity.class)undle = new Bundl
5、e();/該類用作攜帶數(shù)據(jù)bundle.putString(name, “tom);bundle.put(age, 4);ent.putExtras(bundle);/附帶上額外的數(shù)據(jù)startActivity(ent);); 在新的Activity中接收前面Activity傳遞過來的參數(shù):public claewActivity extendivity protected void onCreate(Bundle savedInstane) Bundundle = this.getent().getExtras();String name = bundle.getString(name);a
6、ge = bundle.get(age);獲取Activity返回的數(shù)據(jù)若需在Activity中得到新打開Activity 關(guān)閉后返回的數(shù)據(jù),需使用系統(tǒng)提供的startActivityForResult(entent,reqode)方法打開新的Activity,新的Activity 關(guān)閉后會向前面的Activity 傳回數(shù)據(jù),為了得到傳回的數(shù)據(jù),面的Activity中重寫onActivityResult(reqode,resultCode,必須ent data)方法:獲取Activity返回的數(shù)據(jù)public class MainActivity extendivity Override pr
7、otected void onCreate(Bundle savedInstane) .Button button =(Button) this.findViewById(R.id.button); button.setOnClickListener(new View.OnClickListener()public void onClick(View v) /第二個參數(shù)為請求碼,可以根據(jù)業(yè)務(wù)需求自己startActivityForResult (newent(MainActivity.this, NewActivity.class),1););/第一個參數(shù)為請求碼,即調(diào)用startActivi
8、tyForResult()傳遞過去的值 第二個參數(shù)為結(jié)果碼Override protected void onActivityResult(reqode,resultCode,ent data) String result = data.getExtras().getString(“result”);/得到新Activity 關(guān)閉后返回的數(shù)據(jù) 當(dāng)新Activity關(guān)閉后,新Activity返回的數(shù)據(jù)通過ent進行傳遞,android會調(diào)用前面Activity 的onActivityResult()方法,把存放了返回數(shù)據(jù)的ent作為第三個輸入?yún)?shù)傳入,在onActivityResult()方法中
9、使用第三個輸入?yún)?shù)可以取出新Activity返回的數(shù)據(jù)。得到Activity返回的數(shù)據(jù)使用startActivityForResult(ode)方法打開新的Activity,新entent,reqActivity關(guān)閉前需要向前面的Activity返回數(shù)據(jù)需要使用系統(tǒng)提供的setResult( resultCode,ent data)方法實現(xiàn):public claewActivity extendivity Override protected void onCreate(Bundle savedInstan.button.setOnClickListener(new View.OnClickL
10、istener() public void onClick(View v) e) ent = newent();/數(shù)據(jù)是使用ent返回entent.putExtra(“result”, “o”);/把返回數(shù)據(jù)存入entNewActivity.this.setResult(RESULT_OK,ent);/設(shè)置返回數(shù)據(jù) NewActivity.this.finish();/關(guān)閉Activity);setResult()方法的第一個參數(shù)值可以根據(jù)業(yè)務(wù)需要自己定義,上面代碼中使用到的RESULT_OK是系統(tǒng)Activity類定義的一個常量,值為1Activity生命周期重要數(shù)據(jù)都寫在onPause()
11、里面,最后一個安全生命周期方法四種狀態(tài)Android 的虛擬機(VM)是使用基于棧(Stack based)管理。主要有四種狀態(tài):Active (活動)Paused (暫停)Stopped (停止)Dead (已回收或未啟動)Active (活動)Active狀態(tài)是使用者啟動應(yīng)用程序或Activity 后,Activity 運行中的狀態(tài)。在Android上,同一個時刻只會有一個Activity 處于活動(Active)或運行(Running)狀態(tài)。其他的Activity 都處于未啟動(Dead)、停止(Stopped)、或是暫停(Pause)的狀態(tài)。Paused (暫停)Paused狀態(tài)是當(dāng)A
12、ctivity 暫時暗下來,退到背景畫面的狀態(tài)。當(dāng)使用Toast、AlertDialog、或是來了時,都會讓原本運行的Activity退到背景畫面。新出現(xiàn)的Toast、AlertDialog 等界面元件蓋住了原來的Activity畫面。Activity 處在Paused狀態(tài)時,使用者無法與原Activity 互動。Stopped (停止)Stopped“狀態(tài)是有其他Activity 正在執(zhí)行,而這個Activity已經(jīng)離開屏幕,不再動作的狀態(tài)。通過長按Home鈕,可以叫出所有處于Stopped狀態(tài)的應(yīng)用程序列表。在“Stopped”狀態(tài)的Activity,還可以通過“Notification”
13、來喚醒。Dead (已回收或未啟動)Dead狀態(tài)是Activity 尚未被啟動、已經(jīng)被手動終止,或已經(jīng)被系統(tǒng)回收的狀態(tài)。要手動終止Activity,可以在程序中調(diào)用“finish”函數(shù),若是被系統(tǒng)回收,可能是因為內(nèi)存,因此系統(tǒng)根據(jù)內(nèi)存時的回收規(guī)則,將處于“Stopped”狀態(tài)的Activity 所占用的內(nèi)存回收。Activity 生命周期onCreate()Called when the activity iscreated or when the activity was killedonStart()Called just before the activityes visible to
14、useronRestart()Called after the activity has been stopped, just prior to it being started againActivity 生命周期onResume()Called just before the activity startseracting with the userAt this po going to it., the activity is at the top of the activity stack, with user inputonPause()Called when the system
15、is about to start resuming another activityThis method is typically used to commit unsaved changes to persistentdata, stop animations and other things on.t may be consuming CPU, and soActivity 生命周期onStop()Called when the activity is no longer visible to the userThis may happen because it is being de
16、stroyed, or because another activityhas been resumed and is covering it.onDestroy()Called before the activity is destroyedActivity生命周期分類完整生命周期 onCreate()/ onDestroy()-完整的Activity 生命周期由Create狀態(tài)開始,由Destroy狀態(tài)結(jié)束。建立(Create)時分配資源,銷毀(Destroy)時資源。Activity生命周期分類可視生命周期 onStart()/onStop()-當(dāng)Activity 運行到“Start”狀
17、態(tài)時,就可以在屏幕上看到這個Activity。相反地,當(dāng)Activity 運行到Stop狀態(tài)時,這個Activity 就會從屏幕上。當(dāng)使用者按下Back 按鈕回到上一個Activity 時,會先到Restart 狀態(tài),再到一般的Start 狀態(tài)。Activity生命周期分類前臺生命周期 onResume()/onPause()-使用者能否直接存取螢?zāi)唬≧esume/Pause)當(dāng)有個Toast、AlertDialog、等信息發(fā)生時,原來的Activity 會處于“Pause”狀態(tài),暫、時放棄直接存取屏幕的能力,被中斷到背景去,將前景交給優(yōu)先級高的事件。當(dāng)這些優(yōu)先級高的事件處理完后,Activi
18、ty 就改進入Resume狀態(tài),此時又直接存取屏幕。任務(wù)棧的概念 壓棧 彈棧第三個Activity第二個Activity第一個Activity任務(wù)棧運行過程應(yīng)用程序啟動后,運行第一個Activity之后,該Activity對象被壓入到Stack之中Activity任務(wù)棧運行過程點擊按鈕后啟動第二個Activity,該對象被壓入到Stack中secondActivityActivity任務(wù)棧運行過程點擊第二個Activity按鈕啟動,該對象被壓入到Stack中threeActivitysecondActivityActivity任務(wù)棧運行過程當(dāng)點擊第三Activity中的按鈕啟動之后,啟動第四個
19、ActivitySMivitythreeActivitysecondActivityActivity任務(wù)棧運行過程點擊Back之后,這時SM后面的對象都是一樣。ivity從堆棧出。所有的Activity在同一個Task,被組織稱同一個單元。SMivitythreeActivitysecondActivit yActivity任務(wù)棧和返回堆棧(Tasks & Back Stack)一個應(yīng)用程序通常包含多個Activity。每個Activity都必須設(shè)計成一種特定的操作, 用戶可以通過該操作去實現(xiàn)某項功能,并且操作其他的Activity。例如:一個電子郵件的應(yīng)用程序可能有一個Activity,用于
20、展現(xiàn)出新的電子郵件列表,當(dāng)用戶選擇了一個電子郵件,就打開一個新的Activity以查看該電子郵件。任務(wù)棧和返回堆棧(Tasks & Back Stack)當(dāng)用戶進行某項操作時,任務(wù)棧就收集相互交互的Activity。Activity會被安排在堆棧中(返回堆棧),堆棧中的Activity會按順序來重新打開。一個設(shè)備的主屏幕是大多數(shù)任務(wù)棧的起點。當(dāng)用戶觸摸圖標(或者在屏幕上的快捷方式)時,該應(yīng)用程序就會到達任務(wù)棧的最前面。如果該應(yīng)用在任務(wù)棧中不存在(應(yīng)用在近段時間內(nèi)沒有使用過)就會在任務(wù)棧中創(chuàng)建一個新的任務(wù),并將該應(yīng)用作為主Activity放置在根任務(wù)棧中。任務(wù)棧和返回堆棧(Tasks & Bac
21、k Stack)當(dāng)Activity開始時,新的Activity推入堆棧的頂部和焦點。以前的Activity仍然在堆棧中,但已停止。當(dāng)Activity停止時,系統(tǒng)會保留其用戶界面的當(dāng)前狀態(tài)。當(dāng)用戶按下返回按鈕時,當(dāng)前Activity就會從堆棧的頂部(當(dāng)前的Activity就會被銷毀)和之前的一個Activity就會恢復(fù)(恢復(fù)到之前的UI界面)。 Activity在不會改變,只會壓入和彈出被當(dāng)前Activity啟動時壓入棧頂棧中的順序,用戶用返回鍵離開時彈出。 這樣,back stack 以“后進先出”的方式運行。下圖以時間線表的方式展示了多個Activity切換時對應(yīng)當(dāng)前時間點的Back Tas
22、k狀態(tài)。任務(wù)棧和返回堆棧(Tasks & Back Stack)任務(wù)棧和返回堆棧(Tasks & Back Stack)任務(wù)棧和返回堆棧(Tasks & Back Stack)因為Back Stack 中的Activity順序不會改變,如果應(yīng)用允許某個Activity 可以讓用戶啟動多次,則新的實例會壓入棧頂(而不是打開之前位于棧頂?shù)腁ctivity).于是一個Activity 可能會初始化多次(甚至?xí)挥诓煌腡ask 中),.如果用戶用返回鍵鍵返回時,Activity 的每個實例都會按照原來打開的順序顯示出來(用戶界面也都按原來狀態(tài)顯示.當(dāng)然,如果你不想讓Activity 能被多次實例化,
23、你可以改變它.任務(wù)棧和返回堆棧(Tasks & Back Stack)Activity和Task的默認行為當(dāng)Activity A 啟動 Activity B 時,Activity A 被停止,但系統(tǒng)仍會保存Activity A 狀態(tài)(比如滾動條位置和 form 中填入的文字)如果用戶在 Activity B 中按下返回鍵時,Activity A 恢復(fù)運行,狀態(tài)也將恢復(fù).當(dāng)用戶按下Home鍵離開Task 時,當(dāng)前 Activity 停止Task 轉(zhuǎn)入,系統(tǒng)會保存Task中每個Activity 的狀態(tài)。如果用戶以后通過選中啟動該 Task 的圖標來恢復(fù)Task,Task 就會回到前臺,棧頂?shù)腁ct
24、ivity 會恢復(fù)運行.如果用戶按下返回鍵,當(dāng)前Activity 從棧出,并被銷毀.棧中前一個Activity恢復(fù)運行.當(dāng)Activity 被銷毀時,系統(tǒng)不會保留Activity 的狀態(tài).Activity甚至可以在不同的Task中被實例化多次任務(wù)棧和返回堆棧(Tasks & Back Stack)系統(tǒng)默認會在Activity 停止時保存其狀態(tài).這樣,當(dāng)用戶返回時,用戶的界面能與離開時顯示得一樣.不過也應(yīng)該使用用回調(diào)方法主動地保存Activity的狀態(tài),以便應(yīng)對Activity被銷毀并重建的情況.當(dāng)系統(tǒng)停止一個Activity 運行后(比如啟動了一個新Activity 或者Task 轉(zhuǎn)入),系統(tǒng)
25、在需要回收內(nèi)存的時候有可能會完全銷毀該Activity.這時,該Activity的狀態(tài)信息將會丟失.就算這種情況發(fā)生,該Activity 仍然會存在于Back Stack中.但是當(dāng)它回到棧頂時,系統(tǒng)將必須重建它(而不是恢復(fù)).為了避免用戶工作內(nèi)容的丟失,你應(yīng)通過實現(xiàn)Activity 的onSaveInstane() 方法來主動保存這些內(nèi)容.任務(wù)棧和返回堆棧(Tasks & Back Stack)如上所述,把所有已經(jīng)啟動的Activity 相繼放入同一個Task 中以及一個“先出”棧,Android 管理Task和Back Stack 的這種方式適用于大多數(shù)應(yīng)用,一般不用去管理的Activity
26、 如何與Task關(guān)聯(lián)及如何彈出Back Stack .不過,有時候需要改變這種普通的運行方式.也許你想讓某個Activity啟動一個新的Task(而不是被放入當(dāng)前Task中),或者,你想讓 activity 啟動時只是調(diào)出已有的某個實例(而不是在Back Stack 頂創(chuàng)建一個新的實例)或者,你想在用戶離開Task 時只保留根Activity,而Back Stack中的其它 Activity 都要清空,entent是一種運行時綁定機制,他能在應(yīng)用程序運行的過連接兩個不同的組件,實現(xiàn)組件間的跳轉(zhuǎn)。Activity、Service和BroadcastReceiver,都是通過ent機制激活ent時
27、有不同的方式。的,而不同類型的組件在傳遞entAnent is an abstract description of an operationto be performed:一個的抽象描述。ent就是一次對將要執(zhí)行的操作ent 數(shù)據(jù)結(jié)構(gòu)兩個最重要的部分是:動作:典型的動作類型有:MAIN(活動的門戶)、VIEW、PICK、EDIT等。動作對應(yīng)的數(shù)據(jù):以URI 的形式進行表示例如:要查看某個人的,你需要創(chuàng)建一個動作類型為VIEW 的ent,以及一個表示這個人的URI。entAndroid 使用了ent 這個特殊類,實現(xiàn)在屏幕與屏幕之ent 類用于描述一個應(yīng)用將會做什么事。ent間跳轉(zhuǎn)。目前有三種
28、1.2.3.啟動一個新的activity,并可以攜帶數(shù)據(jù);ent來啟動一個服務(wù);通過一個ent來廣播一個事件;通過40ent例程(頁面跳轉(zhuǎn))importandroid.content.ent;ent(Startup.this,entent = newMainList.class);startActivity(ent);ent顯式調(diào)用,頁面就從Startup.java跳轉(zhuǎn)到MainList.java了。entent都帶有一個動作(action),并根據(jù)不同的動作每個去行動。public void onClick() Uri uri = Uri.parse(http:/);entent = new
29、ent(ent.ACTION_VIEW, uri);startActivity(ent);Listener =new OnClickListener()Public void onClick(View v)setTitle(“Testent”); ent(ActivityMaent)ent=newhiivity2.class);startActivity(要開啟一個網(wǎng)頁,由Android去決定誰要開啟網(wǎng)頁。42ent激活方式Activity:通過調(diào)用Context.startActivity()或者Activity.startActivityForResult()方法。Service:調(diào)用Co
30、ntext.startService()或者Context.bindService()方法將調(diào)用這方法的上下文與Service綁定。BroadcastReceiver:通過ContexdBroadcast()、ContexdOrderBroadcast()和ContexdStickBroadcast()發(fā)送Broadcastent。 Broadcastent發(fā)送后,所有已注entFilter的Broadcastent就會被激活。冊的擁有與之匹配的ent的組成部分 主要包括6部分:ent目標組件的名稱。組件名稱:動作(Action):描述ent所觸發(fā)動作名字的字符串。Data:描述ent要操作的
31、數(shù)據(jù)URI和數(shù)據(jù)類型。Category:對被請求組件的額外描述信息。Extra:當(dāng)ent連接不同的組件時,有時需要在ent添加額使用外的信息,以便把數(shù)據(jù)傳遞給目標Activity。Flag: 借助ent 中的 flag 和 AndroidMainifest.xml 中 activity元素的屬性,就可以控制到 Task 里 Activity 的關(guān)聯(lián)關(guān)系和行為。ent的組成部分一個ent對象主要包含六類信息。并非每個都需要包含這六類信息。ent的組成部分Component nameComponent屬性 明確指定通常 Android框架會根據(jù)ent的目標組件的類名稱ents 中包含的其它屬性的信
32、息,比如action、daype、category進行查找,最終找到一個匹配的目標組件。但是,如果 Component這個屬性有指定的話,將直接使用它指ents定的組件,而不再執(zhí)行上述查找過程。指定了這個屬性以后,的其它所有屬性都是可選的。ent的組成部分Action對執(zhí)行動作的描述:操作(Action)系統(tǒng)自定義了很多Action,ACTION_MAIN ,最熟悉的一個。“android.ent.action.MAIN”,這個在每個AndroidManifest.xml文檔中都可以看到。它標記當(dāng)前Activity作為值一個程序的。自己也可以定義自己的Actionent的組成部分Data數(shù)據(jù)(
33、data): 對于這次動作相關(guān)聯(lián)的數(shù)據(jù)進行描述,表現(xiàn)成為一個URIent的組成部分Action 和 Data 示例1.打開瀏覽器顯示網(wǎng)頁Uri uri = Uri.parse(ht);ent.ACTION_VIEW,uri);entent = newent(ent);startActiventy(2.,調(diào)用撥號程序:撥打Uri uri = Uri.parse(:ent();ent.ACTION_DIAL, uri);entent = newstartActiventy(ent);ent的組成部分Action 和 Data 示例1.調(diào)用程序Uri uri = Uri.parse(smsto:);
34、ent.ACTION_SENDTO, uri); );從entent = newent(ent.putExtra(sms_body, startActiventy(ent);2.中選擇一個聯(lián)系人entent = newent(ent.ACTION_PICK,ContactsContract.Contacts.CONTENT_URI);startActivityForResult(ent, 0);在返回的ent中g(shù)etData()可以得到選中的聯(lián)系人的URIent的組成部分Category類別(category):對執(zhí)行動作的附加信息進行描述,例如:CATEGORY_DEFAULTCATEGOR
35、Y_BROWSABLE可以由瀏覽器打開CATEGORY_TAB可以嵌入帶選項卡的父活動CATEGORY_LAUNCHER 頂級活動,在啟動屏幕上列出該活動CATEGORY_HOME時或按下Home鍵時運行啟動ent的組成部分CATEGORY_HOME 示例category android:name=android.category android:name=android.ent.category.HOME /ent.category.DEFAULT /按下HOME鍵時,該應(yīng)用會被運行ent的組成部分Extras附件信息(extras),是用來傳遞數(shù)據(jù)的。它是一個Bundle類的對象,有一組可
36、序列化的key/value 對組成。ent的組成部分Flags標記(flag):指導(dǎo)如何來啟動一個Activity,是用來指明運行的模式。ent的執(zhí)行者和運行在兩個完全不同的任務(wù)進例如,期望這個,就需要設(shè)置FLAG_ACTIVITY_NEW_TASK 的標志位。Activity間數(shù)據(jù)傳遞public void onClick(View v) entent1 = newent(ActivityMahis, Activity1.class);ent1.putExtra(activityMain, 數(shù)據(jù)來自activityMain);startActivityForResult(ent1, REQU
37、EST_CODE);String data=null;Bundle extras = getif (extras !=ent().getExtras();null) data = extras.getString(activityMain);setTitle(現(xiàn)在是在Activity1里:+data);55Bundle類型Bundle是個類型安全的容器,保存的是名值對,值只能是基本類型或基本類型數(shù)組。如:String、byte、char等。56ent附加數(shù)據(jù)為ent提供了各種常用類型重載后的putExtra()方法,如: putExtra(String name, Stringvalue)、
38、putExtra(String name, long value),在putExtra()方法會判斷當(dāng)前ent對象內(nèi)部是否已經(jīng)存在一個Bundle對象,如果不存在就會新建Bundle對象,以后調(diào)用putExtra()方法傳入的值都會存放于該Bundle對象,下面是方法代碼片斷:ent的putExtra(String name, String value)public classent implements Parcelable private Bundle mExtras;publicent putExtra(String name, String value) if (mExtras = n
39、ull) mExtras = new Bundle(); mExtras.putString(name, value);return this;ent附加數(shù)據(jù)為第一種寫法:用于批量添加數(shù)據(jù)到ent:entent = newent();Bundundle = new Bundle();bundle.putString(name,tom);ent.putExtras(bundle);第二種寫法:等價于上面的寫法,只不過這種寫法是把數(shù)據(jù)一個個地添加進ent,這種寫法使用起來比較方便,而且只需要編寫少量的代碼。entent = newent();ent.putExtra(name, tom);entF
40、ilterentfilter 則用于描述一個activity(或entReceiver )能ent。夠操作哪些一個activity 如果要顯示一個人的entFilter,時,需要一個entFilter 要知道怎么去處理VIEW動作和表示一個人的URI。這個entFilter 需要在AndroidManifest.xml 中定義。entFilterent Filter : 向系統(tǒng)說明該Activity可以做什么?ent,從一個屏幕導(dǎo)航到另一個屏幕是很簡單的。通過各種當(dāng)向前導(dǎo)航時,activity 將會調(diào)用startActivity(entmyent)方法。然后,系統(tǒng)會在所有安裝的應(yīng)用程序中定義的
41、entFilter 中查找,找到最匹配應(yīng)的activity。新的activity 接收到通知后,開始運行。ent 對當(dāng)startActivity 方法被調(diào)用將觸發(fā)ent 的動作。該機制提供了兩個關(guān)鍵好處:ActivitiesActivitiesent 的形式產(chǎn)生的一個請求;能夠重復(fù)利用從其它組件中以可以在任何時候被一個具有相同entFilter 的新的Activity 取代。entReceiverentReceiver 在AndroidManifest.xml 中,也可在代碼中使用Context.registerReceiver()進行。當(dāng)一個entreceiver 被觸發(fā)時,應(yīng)用不必對請求調(diào)
42、用會在需要的時候啟動你的應(yīng)用。entreceiver,系統(tǒng)各種應(yīng)用還可以通過使用Context.broadcastentreceiver 廣播給其它應(yīng)用程序。ent()將自己的當(dāng)希望應(yīng)用能夠?qū)σ粋€外部的事件(如呼入,數(shù)據(jù)網(wǎng)絡(luò)可用,或者某個定時)entReceiver。雖然entReceiver 在感做出響應(yīng),可以使用一個的事件發(fā)生時,會使用NotificationManager通知用戶,但它并不能生成一個UI。ent的調(diào)用方式ent分為顯式和隱式兩種:ent:明確ent顯式了目標組件名稱。顯式用于在應(yīng)用程傳遞消息。比如在某應(yīng)用程序內(nèi),一個Activity啟動一個Service。序ent:沒有明
43、確了目標組件名稱。 Android系統(tǒng)使用隱式entFilter 來尋找與隱式ent相關(guān)的對象。隱式ent恰恰相反,它不會用組件名稱定義需要激活的目標組件,它更廣泛地用于在不同應(yīng)用程序之間傳遞消息。自定義ActionExplicit newImplicitent明確的指定了要啟動的Acitivity ,比如以下Java代碼:ent(this, B.class)ent沒有明確的指定要啟動哪個Activity ,而是通過設(shè)置一些entent=ent Filter來讓系統(tǒng)去篩選合適的Acitivity去啟動。ent到底發(fā)給哪個activity,需要進行三個匹配,一個是action,一個是catego
44、ry,一個是data。理論上來說,如果ent不指定category,那么無論ent filter的內(nèi)容是什么都應(yīng)該是匹配的。但是,如果是implicitent,android默認給加上一個CATEGORY_DEFAULT,這樣的話如果ent filter中沒有android.ent.category.DEFAULT這個category的話,匹配測試就會失敗。所以,如果你的 activity支持接收implicitent的話就一定要在ent filter中加入android.ent.category.DEFAULT。例外情況是:android.ent.category.MAIN和android.
45、android.ent.category.LAUNCHER的filter中沒有必要加入ent.category.DEFAULT,當(dāng)然加入也沒有問題。自定義的activity如果接受implicitent的話,ent filer就一定要加上android.ent.category.DEFAULT這個category。/發(fā)(1)撥打entent=newent(ent.ACTION_CALL,Uri.parse(:+Phone);entent=newent(ent.ACTION_SENDTO,Uri.parse(smsto:5554);ent.putExtra(sms_body, o);startA
46、ctivity(ent);/發(fā)(2)撥打?qū)嶋H無法撥打uses-permis,安全性問題android:name=android.permis.SEND_SMS/Android事件處理模型基于回調(diào)的事件處理重寫Android等組件的特定的回調(diào)方法。在Activity和View類中,定義了若干回調(diào)方法,可以通過覆蓋這些方法來實現(xiàn)事件處理?;诮涌诘氖录幚頌锳ndroid界面組件綁定特定的事件器Handler基于回調(diào)的事件處理在Activity和View類中,定義了若干回調(diào)方法,可以覆蓋這些方法來實現(xiàn)事件處理值,true表示完成了事件處理keyCode,KeyEvent event) keyCod
47、e,KeyEvent event)返回onKeyDown(onKeyUp(onTouchEvent(MotionEvent event)event.getAction()= MotionEvent.ACTION_DOWNevent.getAction()= MotionEvent.ACTION_UPevent.getAction()= MotionEvent.ACTION_MOVE基于接口的事件處理1.2.對View調(diào)用 setOnListener(listener)View類中若干接口:OnClickListener : 點擊事件OnLongClickListener: 長時點擊 OnFoc
48、usChangeListener: 焦點改變 OnKeyListener 鍵盤事件OnTouchListener 觸摸事件OnCreateContextListener 上下文菜單顯示事件基于接口的事件處理1.事件源Event Source:產(chǎn)生事件的來源,通常是各種組件,如按鈕,窗口等。2.事件Event:事件封裝了界面組件上發(fā)生的特定事件的具體信息,如果器需要獲取界面組件上所發(fā)生事件的相關(guān)信息,一般通過事件Event對象來傳遞。3.器Event Listener:事件源發(fā)生的事件,并對不同的事件做相應(yīng)的處理。事件負責(zé)基于接口的事件處理基于器的事件處理機制是一種委派式Delegation的事
49、件處理方式,事件源將整個事件委托給事件器,由器對事件進行響應(yīng)處理。這種處理方式將事件源和事件性。器分離,有利于提供程序的可OnClickListenerOnClickListener接口處理的是點擊事件。在觸發(fā)模式下,是在某個View 上按下并抬起的組合動作,而在鍵盤模式下,是某個 View 獲得焦點后點擊確定鍵或者按下軌跡事件。該接口對應(yīng)回調(diào)方法簽名:Public void onClick(View V);說明:參數(shù) V 便為事件發(fā)生的事件源OnClickListener例程-(1)public class Sle extendivity implements OnClickListener
50、/所有事件器方法都必須實現(xiàn)事件接口Button buttons =TextView textView;new Button4;public void onCreate(Bundle savedInstane) super.onCreate(savedInstansetContentView(R.layout.main);e);buttons0 buttons1 buttons2 buttons3textView =(Button) (Button) (Button)(Button)this.findViewById(R.id.button01); this.findViewById(R.id.
51、button02); this.findViewById(R.id.button03); this.findViewById(R.id.button04);this.findViewById(R.id.textView01);(TextView)textView.setTextSize(18);OnClickListener例程-(2)for(Button button : buttons) button.setOnClickListener(this); /給每一個按鈕器Overridepublic void onClick(View v) if(v = buttons0)/按下第一個按鈕時
52、/實現(xiàn)事件方法textView.setText(您按下了+(Button)v).getText()+,此時是分開處理的!);else/按下其他按鈕時textView.setText(您按下了 + (Button)v).getText();OnLongClickListenerOnLongClickListener 接口和 OnClickListener 接口基本原理是相同的,只是該接口是長按事件的捕捉接口,即當(dāng)長時間按下某個 View 時觸發(fā)的事件。該接口對應(yīng)方法的簽名為:Public說明:onLongClick(View V);參數(shù) V返回值:參數(shù) V 為事件源控件,當(dāng)長時間按下此控件時才會
53、觸發(fā)該方法類型的變量,當(dāng)返回為 true 時,: 該方法的返回值為一個表示已經(jīng)完整地處理了這個事件,并不希望其他的回調(diào)方法再次進行處理;當(dāng)返回為 false 時,表示并沒有完成處理該事件,更希望其他方法繼續(xù)對其進行處理。OnLongClickListener例程public class Sle_7_5 extendivity implements OnLongClickListener/實現(xiàn)的接口按鈕的Button button;/e) /重寫的onCreate方法public void onCreate(Bundle savedInstansuper.onCreate(savedInstan
54、setContentView(R.layout.main);e);button = (Button) this.findViewById(R.id.button);/得到按鈕的button.setTextSize(20);button.setOnLongClickListener(this);Override/publiconLongClick(View v) /實現(xiàn)接口中的方法if(v = button)/當(dāng)按下的是按鈕時Toast.makeText( this,長時間按下了按鈕,Toast.LENGTH_SHORT).show();/顯示提示 return false;OnFocusCha
55、ngeListenerOnFocusChangeListener 接口用來處理控件焦點發(fā)生改變的事件。如果了該接口每當(dāng)某個控件失去焦點或者獲得焦點時都會觸發(fā)該接口中的回調(diào)方法。該接口對應(yīng)的簽名方法為:Public void onFocusChangeListener(View V, hasFocus)說明:參數(shù) V:參數(shù) V便為觸發(fā)該事件的事件源參數(shù) hasFocus:參數(shù)hasFocus 表示v的新狀態(tài),即 v 是否獲得焦點。OnFocusChangeListener例程-(1)public class TestActivity extendTextView myTextView;ivity
56、 implements OnFocusChangeListenerImageButton imageButtons = new ImageButton4; Overridepublic void onCreate(Bundle savedInstane) super.onCreate(savedInstansetContentView(R.layout.main);e);myTextView = (TextView) this.findViewById(R.id.myTextView);imageButtons0 = (ImageButton) this.findViewById(R.id.b
57、utton01);imageButtons1 imageButtons2imageButtons3=(ImageButton) (ImageButton)(ImageButton)this.findViewById(R.id.button02); this.findViewById(R.id.button03);this.findViewById(R.id.button04);for(ImageButton imageButton: imageButtons)/添加imageButton.setOnFocusChangeListener(this); OnFocusChangeListener
58、例程-(2)public void onFocusChange(View v,/實現(xiàn)了接口中的方法hasFocus) if(v.getId() = R.id.button01)/改變的是button01時myTextView.setText(您選中了羊!);else if(v.getId() = R.id.button02)/改變的是button02時 myTextView.setText(您選中了豬!);else if(v.getId() = R.id.button03)/改變的是button03時 myTextView.setText(您選中了牛!);else if(v.getId() =
59、 R.id.button04)/改變的是button04時 myTextView.setText(您選中了鼠!);else/其他情況 myTextView.setText();OnKeyListenerOnKeyListener 是對的接口,通過對某個 View鍵盤進行該簡體ing,當(dāng) View 獲得焦點并有鍵盤事件時,便會觸發(fā)該接口中的回調(diào)方法。該接口中的回調(diào)方法如下:public說明:onkey(View v,keyCode,KeyEvent event);參數(shù) V:參數(shù) v 為時間按的事件源控件。參數(shù) keyCode:參數(shù) keyCode 為鍵盤的鍵碼。參數(shù) event:參數(shù) event
60、 便為鍵盤事件封裝類的對象,其中包含了事件的詳細信息OnKeyListener例程-(1)public class Sle_7_7 extendivity implementsOnKeyListener,OnClickListenerImageButton imageButtons = new ImageButton4;/按鈕數(shù)組TextView的TextView myTextView;/Overridepublic void onCreate(Bundle savedInstane) super.onCreate(savedInstane);this.setContentView(R.lay
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 4.2《爐中煤》《紅燭》教案-【中職專用】高二語文同步教學(xué)(高教版2024·拓展模塊下冊)
- 第一章《走進信息社會》第4課時《信息技術(shù)促進社會變革與發(fā)展》教學(xué)設(shè)計 2023-2024學(xué)年粵教版(2019)高中信息技術(shù)必修2
- 11-2《與妻書》教學(xué)設(shè)計-2024-2025學(xué)年高一語文下學(xué)期同步教學(xué)設(shè)計(統(tǒng)編版必修下冊)
- 探索1 物聯(lián)網(wǎng)的傳感技術(shù) 教學(xué)設(shè)計 2024-2025學(xué)年 蘇科版(2023)初中信息科技 八年級上冊
- 2024年12月國家空間科學(xué)中心太陽活動與空間天氣重點實驗室實驗人員公開招聘2人筆試歷年典型考題(歷年真題考點)解題思路附帶答案詳解
- Module 2 Public Holiday Unit 2教學(xué)設(shè)計2024-2025學(xué)年外研版英語九年級上冊
- 2025年船用動力堆及配套產(chǎn)品合作協(xié)議書
- 財會從業(yè)資格考試模擬題(附參考答案)
- 第18課 從九一八事變到西安事變(教學(xué)設(shè)計)-2024-2025學(xué)年浙江省部編版歷史與社會八年級上冊
- 財務(wù)管理模擬試題與答案
- 《汽車電氣設(shè)備構(gòu)造與維修》 (第4版) 課件 第四章 發(fā)動機電器
- 部編版語文六年級下冊第五單元大單元教學(xué)設(shè)計核心素養(yǎng)目標
- 售后服務(wù)的常見挑戰(zhàn)及應(yīng)對策略
- 成人鼾癥的診斷與治療
- 智能環(huán)境設(shè)備的智能監(jiān)測與環(huán)境保護
- 2024年中車株洲電力機車研究所有限公司招聘筆試參考題庫含答案解析
- 文物保護概論課件
- 巴黎歐萊雅中國員工手冊
- 貨幣的起源發(fā)展演變和貨幣的面值課件
- 建筑業(yè)10項新技術(shù)概述
- 合肥的文化民俗
評論
0/150
提交評論