版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、應(yīng)用開發(fā)處理Android Framework四大元素Activities-管理應(yīng)用程序展示Servi-管理服務(wù)Broadcast receiversContent Provider-管理數(shù)據(jù)共享溝通的橋梁:ent2Activity多個(gè)Activity之間的關(guān)系startActivity(ent)ActivityBActivityA活動(dòng)(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)啟動(dòng)新的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()/點(diǎn)擊該按鈕會(huì)打開一個(gè)新的Activitypublic void onClick(View v) /新建一個(gè)對(duì)象,第二個(gè)參數(shù)為你要打開的Activity類ent,第一個(gè)參數(shù)為當(dāng)前Activity類startActivity(newent(MainActivity.this, NewActivity.class)
4、;); 啟動(dòng)新的Activity(二)第二種:打開新的Activity,傳遞參數(shù)public class MainActivity extendivity protected void onCreate(Bundle savedInstan.e) button.setOnClickListener(new View.OnClickListener()/點(diǎn)擊該按鈕會(huì)打開一個(gè)新的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)閉后會(huì)向前面的Activity 傳回?cái)?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) /第二個(gè)參數(shù)為請(qǐng)求碼,可以根據(jù)業(yè)務(wù)需求自己startActivityForResult (newent(MainActivity.this, NewActivity.class),1););/第一個(gè)參數(shù)為請(qǐng)求碼,即調(diào)用startActivi
8、tyForResult()傳遞過去的值 第二個(gè)參數(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進(jìn)行傳遞,android會(huì)調(diào)用前面Activity 的onActivityResult()方法,把存放了返回?cái)?shù)據(jù)的ent作為第三個(gè)輸入?yún)?shù)傳入,在onActivityResult()方法中
9、使用第三個(gè)輸入?yún)?shù)可以取出新Activity返回的數(shù)據(jù)。得到Activity返回的數(shù)據(jù)使用startActivityForResult(ode)方法打開新的Activity,新entent,reqActivity關(guān)閉前需要向前面的Activity返回?cái)?shù)據(jù)需要使用系統(tǒng)提供的setResult( resultCode,ent data)方法實(shí)現(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”);/把返回?cái)?shù)據(jù)存入entNewActivity.this.setResult(RESULT_OK,ent);/設(shè)置返回?cái)?shù)據(jù) NewActivity.this.finish();/關(guān)閉Activity);setResult()方法的第一個(gè)參數(shù)值可以根據(jù)業(yè)務(wù)需要自己定義,上面代碼中使用到的RESULT_OK是系統(tǒng)Activity類定義的一個(gè)常量,值為1Activity生命周期重要數(shù)據(jù)都寫在onPause()
11、里面,最后一個(gè)安全生命周期方法四種狀態(tài)Android 的虛擬機(jī)(VM)是使用基于棧(Stack based)管理。主要有四種狀態(tài):Active (活動(dòng))Paused (暫停)Stopped (停止)Dead (已回收或未啟動(dòng))Active (活動(dòng))Active狀態(tài)是使用者啟動(dòng)應(yīng)用程序或Activity 后,Activity 運(yùn)行中的狀態(tài)。在Android上,同一個(gè)時(shí)刻只會(huì)有一個(gè)Activity 處于活動(dòng)(Active)或運(yùn)行(Running)狀態(tài)。其他的Activity 都處于未啟動(dòng)(Dead)、停止(Stopped)、或是暫停(Pause)的狀態(tài)。Paused (暫停)Paused狀態(tài)是當(dāng)A
12、ctivity 暫時(shí)暗下來,退到背景畫面的狀態(tài)。當(dāng)使用Toast、AlertDialog、或是來了時(shí),都會(huì)讓原本運(yùn)行的Activity退到背景畫面。新出現(xiàn)的Toast、AlertDialog 等界面元件蓋住了原來的Activity畫面。Activity 處在Paused狀態(tài)時(shí),使用者無法與原Activity 互動(dòng)。Stopped (停止)Stopped“狀態(tài)是有其他Activity 正在執(zhí)行,而這個(gè)Activity已經(jīng)離開屏幕,不再動(dòng)作的狀態(tài)。通過長(zhǎng)按Home鈕,可以叫出所有處于Stopped狀態(tài)的應(yīng)用程序列表。在“Stopped”狀態(tài)的Activity,還可以通過“Notification”
13、來喚醒。Dead (已回收或未啟動(dòng))Dead狀態(tài)是Activity 尚未被啟動(dòng)、已經(jīng)被手動(dòng)終止,或已經(jīng)被系統(tǒng)回收的狀態(tài)。要手動(dòng)終止Activity,可以在程序中調(diào)用“finish”函數(shù),若是被系統(tǒng)回收,可能是因?yàn)閮?nèi)存,因此系統(tǒng)根據(jù)內(nèi)存時(shí)的回收規(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)時(shí)分配資源,銷毀(Destroy)時(shí)資源。Activity生命周期分類可視生命周期 onStart()/onStop()-當(dāng)Activity 運(yùn)行到“Start”狀
17、態(tài)時(shí),就可以在屏幕上看到這個(gè)Activity。相反地,當(dāng)Activity 運(yùn)行到Stop狀態(tài)時(shí),這個(gè)Activity 就會(huì)從屏幕上。當(dāng)使用者按下Back 按鈕回到上一個(gè)Activity 時(shí),會(huì)先到Restart 狀態(tài),再到一般的Start 狀態(tài)。Activity生命周期分類前臺(tái)生命周期 onResume()/onPause()-使用者能否直接存取螢?zāi)唬≧esume/Pause)當(dāng)有個(gè)Toast、AlertDialog、等信息發(fā)生時(shí),原來的Activity 會(huì)處于“Pause”狀態(tài),暫、時(shí)放棄直接存取屏幕的能力,被中斷到背景去,將前景交給優(yōu)先級(jí)高的事件。當(dāng)這些優(yōu)先級(jí)高的事件處理完后,Activi
18、ty 就改進(jìn)入Resume狀態(tài),此時(shí)又直接存取屏幕。任務(wù)棧的概念 壓棧 彈棧第三個(gè)Activity第二個(gè)Activity第一個(gè)Activity任務(wù)棧運(yùn)行過程應(yīng)用程序啟動(dòng)后,運(yùn)行第一個(gè)Activity之后,該Activity對(duì)象被壓入到Stack之中Activity任務(wù)棧運(yùn)行過程點(diǎn)擊按鈕后啟動(dòng)第二個(gè)Activity,該對(duì)象被壓入到Stack中secondActivityActivity任務(wù)棧運(yùn)行過程點(diǎn)擊第二個(gè)Activity按鈕啟動(dòng),該對(duì)象被壓入到Stack中threeActivitysecondActivityActivity任務(wù)棧運(yùn)行過程當(dāng)點(diǎn)擊第三Activity中的按鈕啟動(dòng)之后,啟動(dòng)第四個(gè)
19、ActivitySMivitythreeActivitysecondActivityActivity任務(wù)棧運(yùn)行過程點(diǎn)擊Back之后,這時(shí)SM后面的對(duì)象都是一樣。ivity從堆棧出。所有的Activity在同一個(gè)Task,被組織稱同一個(gè)單元。SMivitythreeActivitysecondActivit yActivity任務(wù)棧和返回堆棧(Tasks & Back Stack)一個(gè)應(yīng)用程序通常包含多個(gè)Activity。每個(gè)Activity都必須設(shè)計(jì)成一種特定的操作, 用戶可以通過該操作去實(shí)現(xiàn)某項(xiàng)功能,并且操作其他的Activity。例如:一個(gè)電子郵件的應(yīng)用程序可能有一個(gè)Activity,用于
20、展現(xiàn)出新的電子郵件列表,當(dāng)用戶選擇了一個(gè)電子郵件,就打開一個(gè)新的Activity以查看該電子郵件。任務(wù)棧和返回堆棧(Tasks & Back Stack)當(dāng)用戶進(jìn)行某項(xiàng)操作時(shí),任務(wù)棧就收集相互交互的Activity。Activity會(huì)被安排在堆棧中(返回堆棧),堆棧中的Activity會(huì)按順序來重新打開。一個(gè)設(shè)備的主屏幕是大多數(shù)任務(wù)棧的起點(diǎn)。當(dāng)用戶觸摸圖標(biāo)(或者在屏幕上的快捷方式)時(shí),該應(yīng)用程序就會(huì)到達(dá)任務(wù)棧的最前面。如果該應(yīng)用在任務(wù)棧中不存在(應(yīng)用在近段時(shí)間內(nèi)沒有使用過)就會(huì)在任務(wù)棧中創(chuàng)建一個(gè)新的任務(wù),并將該應(yīng)用作為主Activity放置在根任務(wù)棧中。任務(wù)棧和返回堆棧(Tasks & Bac
21、k Stack)當(dāng)Activity開始時(shí),新的Activity推入堆棧的頂部和焦點(diǎn)。以前的Activity仍然在堆棧中,但已停止。當(dāng)Activity停止時(shí),系統(tǒng)會(huì)保留其用戶界面的當(dāng)前狀態(tài)。當(dāng)用戶按下返回按鈕時(shí),當(dāng)前Activity就會(huì)從堆棧的頂部(當(dāng)前的Activity就會(huì)被銷毀)和之前的一個(gè)Activity就會(huì)恢復(fù)(恢復(fù)到之前的UI界面)。 Activity在不會(huì)改變,只會(huì)壓入和彈出被當(dāng)前Activity啟動(dòng)時(shí)壓入棧頂棧中的順序,用戶用返回鍵離開時(shí)彈出。 這樣,back stack 以“后進(jìn)先出”的方式運(yùn)行。下圖以時(shí)間線表的方式展示了多個(gè)Activity切換時(shí)對(duì)應(yīng)當(dāng)前時(shí)間點(diǎn)的Back Tas
22、k狀態(tài)。任務(wù)棧和返回堆棧(Tasks & Back Stack)任務(wù)棧和返回堆棧(Tasks & Back Stack)任務(wù)棧和返回堆棧(Tasks & Back Stack)因?yàn)锽ack Stack 中的Activity順序不會(huì)改變,如果應(yīng)用允許某個(gè)Activity 可以讓用戶啟動(dòng)多次,則新的實(shí)例會(huì)壓入棧頂(而不是打開之前位于棧頂?shù)腁ctivity).于是一個(gè)Activity 可能會(huì)初始化多次(甚至?xí)挥诓煌腡ask 中),.如果用戶用返回鍵鍵返回時(shí),Activity 的每個(gè)實(shí)例都會(huì)按照原來打開的順序顯示出來(用戶界面也都按原來狀態(tài)顯示.當(dāng)然,如果你不想讓Activity 能被多次實(shí)例化,
23、你可以改變它.任務(wù)棧和返回堆棧(Tasks & Back Stack)Activity和Task的默認(rèn)行為當(dāng)Activity A 啟動(dòng) Activity B 時(shí),Activity A 被停止,但系統(tǒng)仍會(huì)保存Activity A 狀態(tài)(比如滾動(dòng)條位置和 form 中填入的文字)如果用戶在 Activity B 中按下返回鍵時(shí),Activity A 恢復(fù)運(yùn)行,狀態(tài)也將恢復(fù).當(dāng)用戶按下Home鍵離開Task 時(shí),當(dāng)前 Activity 停止Task 轉(zhuǎn)入,系統(tǒng)會(huì)保存Task中每個(gè)Activity 的狀態(tài)。如果用戶以后通過選中啟動(dòng)該 Task 的圖標(biāo)來恢復(fù)Task,Task 就會(huì)回到前臺(tái),棧頂?shù)腁ct
24、ivity 會(huì)恢復(fù)運(yùn)行.如果用戶按下返回鍵,當(dāng)前Activity 從棧出,并被銷毀.棧中前一個(gè)Activity恢復(fù)運(yùn)行.當(dāng)Activity 被銷毀時(shí),系統(tǒng)不會(huì)保留Activity 的狀態(tài).Activity甚至可以在不同的Task中被實(shí)例化多次任務(wù)棧和返回堆棧(Tasks & Back Stack)系統(tǒng)默認(rèn)會(huì)在Activity 停止時(shí)保存其狀態(tài).這樣,當(dāng)用戶返回時(shí),用戶的界面能與離開時(shí)顯示得一樣.不過也應(yīng)該使用用回調(diào)方法主動(dòng)地保存Activity的狀態(tài),以便應(yīng)對(duì)Activity被銷毀并重建的情況.當(dāng)系統(tǒng)停止一個(gè)Activity 運(yùn)行后(比如啟動(dòng)了一個(gè)新Activity 或者Task 轉(zhuǎn)入),系統(tǒng)
25、在需要回收內(nèi)存的時(shí)候有可能會(huì)完全銷毀該Activity.這時(shí),該Activity的狀態(tài)信息將會(huì)丟失.就算這種情況發(fā)生,該Activity 仍然會(huì)存在于Back Stack中.但是當(dāng)它回到棧頂時(shí),系統(tǒng)將必須重建它(而不是恢復(fù)).為了避免用戶工作內(nèi)容的丟失,你應(yīng)通過實(shí)現(xiàn)Activity 的onSaveInstane() 方法來主動(dòng)保存這些內(nèi)容.任務(wù)棧和返回堆棧(Tasks & Back Stack)如上所述,把所有已經(jīng)啟動(dòng)的Activity 相繼放入同一個(gè)Task 中以及一個(gè)“先出”棧,Android 管理Task和Back Stack 的這種方式適用于大多數(shù)應(yīng)用,一般不用去管理的Activity
26、 如何與Task關(guān)聯(lián)及如何彈出Back Stack .不過,有時(shí)候需要改變這種普通的運(yùn)行方式.也許你想讓某個(gè)Activity啟動(dòng)一個(gè)新的Task(而不是被放入當(dāng)前Task中),或者,你想讓 activity 啟動(dòng)時(shí)只是調(diào)出已有的某個(gè)實(shí)例(而不是在Back Stack 頂創(chuàng)建一個(gè)新的實(shí)例)或者,你想在用戶離開Task 時(shí)只保留根Activity,而Back Stack中的其它 Activity 都要清空,entent是一種運(yùn)行時(shí)綁定機(jī)制,他能在應(yīng)用程序運(yùn)行的過連接兩個(gè)不同的組件,實(shí)現(xiàn)組件間的跳轉(zhuǎn)。Activity、Service和BroadcastReceiver,都是通過ent機(jī)制激活ent時(shí)
27、有不同的方式。的,而不同類型的組件在傳遞entAnent is an abstract description of an operationto be performed:一個(gè)的抽象描述。ent就是一次對(duì)將要執(zhí)行的操作ent 數(shù)據(jù)結(jié)構(gòu)兩個(gè)最重要的部分是:動(dòng)作:典型的動(dòng)作類型有:MAIN(活動(dòng)的門戶)、VIEW、PICK、EDIT等。動(dòng)作對(duì)應(yīng)的數(shù)據(jù):以URI 的形式進(jìn)行表示例如:要查看某個(gè)人的,你需要?jiǎng)?chuàng)建一個(gè)動(dòng)作類型為VIEW 的ent,以及一個(gè)表示這個(gè)人的URI。entAndroid 使用了ent 這個(gè)特殊類,實(shí)現(xiàn)在屏幕與屏幕之ent 類用于描述一個(gè)應(yīng)用將會(huì)做什么事。ent間跳轉(zhuǎn)。目前有三種
28、1.2.3.啟動(dòng)一個(gè)新的activity,并可以攜帶數(shù)據(jù);ent來啟動(dòng)一個(gè)服務(wù);通過一個(gè)ent來廣播一個(gè)事件;通過40ent例程(頁面跳轉(zhuǎn))importandroid.content.ent;ent(Startup.this,entent = newMainList.class);startActivity(ent);ent顯式調(diào)用,頁面就從Startup.java跳轉(zhuǎn)到MainList.java了。entent都帶有一個(gè)動(dòng)作(action),并根據(jù)不同的動(dòng)作每個(gè)去行動(dòng)。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(要開啟一個(gè)網(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就會(huì)被激活。冊(cè)的擁有與之匹配的ent的組成部分 主要包括6部分:ent目標(biāo)組件的名稱。組件名稱:動(dòng)作(Action):描述ent所觸發(fā)動(dòng)作名字的字符串。Data:描述ent要操作的
31、數(shù)據(jù)URI和數(shù)據(jù)類型。Category:對(duì)被請(qǐng)求組件的額外描述信息。Extra:當(dāng)ent連接不同的組件時(shí),有時(shí)需要在ent添加額使用外的信息,以便把數(shù)據(jù)傳遞給目標(biāo)Activity。Flag: 借助ent 中的 flag 和 AndroidMainifest.xml 中 activity元素的屬性,就可以控制到 Task 里 Activity 的關(guān)聯(lián)關(guān)系和行為。ent的組成部分一個(gè)ent對(duì)象主要包含六類信息。并非每個(gè)都需要包含這六類信息。ent的組成部分Component nameComponent屬性 明確指定通常 Android框架會(huì)根據(jù)ent的目標(biāo)組件的類名稱ents 中包含的其它屬性的信
32、息,比如action、daype、category進(jìn)行查找,最終找到一個(gè)匹配的目標(biāo)組件。但是,如果 Component這個(gè)屬性有指定的話,將直接使用它指ents定的組件,而不再執(zhí)行上述查找過程。指定了這個(gè)屬性以后,的其它所有屬性都是可選的。ent的組成部分Action對(duì)執(zhí)行動(dòng)作的描述:操作(Action)系統(tǒng)自定義了很多Action,ACTION_MAIN ,最熟悉的一個(gè)。“android.ent.action.MAIN”,這個(gè)在每個(gè)AndroidManifest.xml文檔中都可以看到。它標(biāo)記當(dāng)前Activity作為值一個(gè)程序的。自己也可以定義自己的Actionent的組成部分Data數(shù)據(jù)(
33、data): 對(duì)于這次動(dòng)作相關(guān)聯(lián)的數(shù)據(jù)進(jìn)行描述,表現(xiàn)成為一個(gè)URIent的組成部分Action 和 Data 示例1.打開瀏覽器顯示網(wǎng)頁Uri uri = Uri.parse(ht);ent.ACTION_VIEW,uri);entent = newent(ent);startActiventy(2.,調(diào)用撥號(hà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.中選擇一個(gè)聯(lián)系人entent = newent(ent.ACTION_PICK,ContactsContract.Contacts.CONTENT_URI);startActivityForResult(ent, 0);在返回的ent中g(shù)etData()可以得到選中的聯(lián)系人的URIent的組成部分Category類別(category):對(duì)執(zhí)行動(dòng)作的附加信息進(jìn)行描述,例如:CATEGORY_DEFAULTCATEGOR
35、Y_BROWSABLE可以由瀏覽器打開CATEGORY_TAB可以嵌入帶選項(xiàng)卡的父活動(dòng)CATEGORY_LAUNCHER 頂級(jí)活動(dòng),在啟動(dòng)屏幕上列出該活動(dòng)CATEGORY_HOME時(shí)或按下Home鍵時(shí)運(yùn)行啟動(dòng)ent的組成部分CATEGORY_HOME 示例category android:name=android.category android:name=android.ent.category.HOME /ent.category.DEFAULT /按下HOME鍵時(shí),該應(yīng)用會(huì)被運(yùn)行ent的組成部分Extras附件信息(extras),是用來傳遞數(shù)據(jù)的。它是一個(gè)Bundle類的對(duì)象,有一組可
36、序列化的key/value 對(duì)組成。ent的組成部分Flags標(biāo)記(flag):指導(dǎo)如何來啟動(dòng)一個(gè)Activity,是用來指明運(yùn)行的模式。ent的執(zhí)行者和運(yùn)行在兩個(gè)完全不同的任務(wù)進(jìn)例如,期望這個(gè),就需要設(shè)置FLAG_ACTIVITY_NEW_TASK 的標(biāo)志位。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是個(gè)類型安全的容器,保存的是名值對(duì),值只能是基本類型或基本類型數(shù)組。如:String、byte、char等。56ent附加數(shù)據(jù)為ent提供了各種常用類型重載后的putExtra()方法,如: putExtra(String name, Stringvalue)、
38、putExtra(String name, long value),在putExtra()方法會(huì)判斷當(dāng)前ent對(duì)象內(nèi)部是否已經(jīng)存在一個(gè)Bundle對(duì)象,如果不存在就會(huì)新建Bundle對(duì)象,以后調(diào)用putExtra()方法傳入的值都會(huì)存放于該Bundle對(duì)象,下面是方法代碼片斷: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);第二種寫法:等價(jià)于上面的寫法,只不過這種寫法是把數(shù)據(jù)一個(gè)個(gè)地添加進(jìn)ent,這種寫法使用起來比較方便,而且只需要編寫少量的代碼。entent = newent();ent.putExtra(name, tom);entF
40、ilterentfilter 則用于描述一個(gè)activity(或entReceiver )能ent。夠操作哪些一個(gè)activity 如果要顯示一個(gè)人的entFilter,時(shí),需要一個(gè)entFilter 要知道怎么去處理VIEW動(dòng)作和表示一個(gè)人的URI。這個(gè)entFilter 需要在AndroidManifest.xml 中定義。entFilterent Filter : 向系統(tǒng)說明該Activity可以做什么?ent,從一個(gè)屏幕導(dǎo)航到另一個(gè)屏幕是很簡(jiǎn)單的。通過各種當(dāng)向前導(dǎo)航時(shí),activity 將會(huì)調(diào)用startActivity(entmyent)方法。然后,系統(tǒng)會(huì)在所有安裝的應(yīng)用程序中定義的
41、entFilter 中查找,找到最匹配應(yīng)的activity。新的activity 接收到通知后,開始運(yùn)行。ent 對(duì)當(dāng)startActivity 方法被調(diào)用將觸發(fā)ent 的動(dòng)作。該機(jī)制提供了兩個(gè)關(guān)鍵好處:ActivitiesActivitiesent 的形式產(chǎn)生的一個(gè)請(qǐng)求;能夠重復(fù)利用從其它組件中以可以在任何時(shí)候被一個(gè)具有相同entFilter 的新的Activity 取代。entReceiverentReceiver 在AndroidManifest.xml 中,也可在代碼中使用Context.registerReceiver()進(jìn)行。當(dāng)一個(gè)entreceiver 被觸發(fā)時(shí),應(yīng)用不必對(duì)請(qǐng)求調(diào)
42、用會(huì)在需要的時(shí)候啟動(dòng)你的應(yīng)用。entreceiver,系統(tǒng)各種應(yīng)用還可以通過使用Context.broadcastentreceiver 廣播給其它應(yīng)用程序。ent()將自己的當(dāng)希望應(yīng)用能夠?qū)σ粋€(gè)外部的事件(如呼入,數(shù)據(jù)網(wǎng)絡(luò)可用,或者某個(gè)定時(shí))entReceiver。雖然entReceiver 在感做出響應(yīng),可以使用一個(gè)的事件發(fā)生時(shí),會(huì)使用NotificationManager通知用戶,但它并不能生成一個(gè)UI。ent的調(diào)用方式ent分為顯式和隱式兩種:ent:明確ent顯式了目標(biāo)組件名稱。顯式用于在應(yīng)用程傳遞消息。比如在某應(yīng)用程序內(nèi),一個(gè)Activity啟動(dòng)一個(gè)Service。序ent:沒有明
43、確了目標(biāo)組件名稱。 Android系統(tǒng)使用隱式entFilter 來尋找與隱式ent相關(guān)的對(duì)象。隱式ent恰恰相反,它不會(huì)用組件名稱定義需要激活的目標(biāo)組件,它更廣泛地用于在不同應(yīng)用程序之間傳遞消息。自定義ActionExplicit newImplicitent明確的指定了要啟動(dòng)的Acitivity ,比如以下Java代碼:ent(this, B.class)ent沒有明確的指定要啟動(dòng)哪個(gè)Activity ,而是通過設(shè)置一些entent=ent Filter來讓系統(tǒng)去篩選合適的Acitivity去啟動(dòng)。ent到底發(fā)給哪個(gè)activity,需要進(jìn)行三個(gè)匹配,一個(gè)是action,一個(gè)是catego
44、ry,一個(gè)是data。理論上來說,如果ent不指定category,那么無論ent filter的內(nèi)容是什么都應(yīng)該是匹配的。但是,如果是implicitent,android默認(rèn)給加上一個(gè)CATEGORY_DEFAULT,這樣的話如果ent filter中沒有android.ent.category.DEFAULT這個(gè)category的話,匹配測(cè)試就會(huì)失敗。所以,如果你的 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這個(gè)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)方法,可以通過覆蓋這些方法來實(shí)現(xiàn)事件處理。基于接口的事件處理為Android界面組件綁定特定的事件器Handler基于回調(diào)的事件處理在Activity和View類中,定義了若干回調(diào)方法,可以覆蓋這些方法來實(shí)現(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.對(duì)View調(diào)用 setOnListener(listener)View類中若干接口:OnClickListener : 點(diǎn)擊事件OnLongClickListener: 長(zhǎng)時(shí)點(diǎn)擊 OnFoc
48、usChangeListener: 焦點(diǎn)改變 OnKeyListener 鍵盤事件OnTouchListener 觸摸事件OnCreateContextListener 上下文菜單顯示事件基于接口的事件處理1.事件源Event Source:產(chǎn)生事件的來源,通常是各種組件,如按鈕,窗口等。2.事件Event:事件封裝了界面組件上發(fā)生的特定事件的具體信息,如果器需要獲取界面組件上所發(fā)生事件的相關(guān)信息,一般通過事件Event對(duì)象來傳遞。3.器Event Listener:事件源發(fā)生的事件,并對(duì)不同的事件做相應(yīng)的處理。事件負(fù)責(zé)基于接口的事件處理基于器的事件處理機(jī)制是一種委派式Delegation的事
49、件處理方式,事件源將整個(gè)事件委托給事件器,由器對(duì)事件進(jìn)行響應(yīng)處理。這種處理方式將事件源和事件性。器分離,有利于提供程序的可OnClickListenerOnClickListener接口處理的是點(diǎn)擊事件。在觸發(fā)模式下,是在某個(gè)View 上按下并抬起的組合動(dòng)作,而在鍵盤模式下,是某個(gè) View 獲得焦點(diǎn)后點(diǎn)擊確定鍵或者按下軌跡事件。該接口對(duì)應(yīng)回調(diào)方法簽名:Public void onClick(View V);說明:參數(shù) V 便為事件發(fā)生的事件源OnClickListener例程-(1)public class Sle extendivity implements OnClickListener
50、/所有事件器方法都必須實(shí)現(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); /給每一個(gè)按鈕器Overridepublic void onClick(View v) if(v = buttons0)/按下第一個(gè)按鈕時(shí)
52、/實(shí)現(xiàn)事件方法textView.setText(您按下了+(Button)v).getText()+,此時(shí)是分開處理的!);else/按下其他按鈕時(shí)textView.setText(您按下了 + (Button)v).getText();OnLongClickListenerOnLongClickListener 接口和 OnClickListener 接口基本原理是相同的,只是該接口是長(zhǎng)按事件的捕捉接口,即當(dāng)長(zhǎng)時(shí)間按下某個(gè) View 時(shí)觸發(fā)的事件。該接口對(duì)應(yīng)方法的簽名為:Public說明:onLongClick(View V);參數(shù) V返回值:參數(shù) V 為事件源控件,當(dāng)長(zhǎng)時(shí)間按下此控件時(shí)才會(huì)
53、觸發(fā)該方法類型的變量,當(dāng)返回為 true 時(shí),: 該方法的返回值為一個(gè)表示已經(jīng)完整地處理了這個(gè)事件,并不希望其他的回調(diào)方法再次進(jìn)行處理;當(dāng)返回為 false 時(shí),表示并沒有完成處理該事件,更希望其他方法繼續(xù)對(duì)其進(jìn)行處理。OnLongClickListener例程public class Sle_7_5 extendivity implements OnLongClickListener/實(shí)現(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) /實(shí)現(xiàn)接口中的方法if(v = button)/當(dāng)按下的是按鈕時(shí)Toast.makeText( this,長(zhǎng)時(shí)間按下了按鈕,Toast.LENGTH_SHORT).show();/顯示提示 return false;OnFocusCha
55、ngeListenerOnFocusChangeListener 接口用來處理控件焦點(diǎn)發(fā)生改變的事件。如果了該接口每當(dāng)某個(gè)控件失去焦點(diǎn)或者獲得焦點(diǎn)時(shí)都會(huì)觸發(fā)該接口中的回調(diào)方法。該接口對(duì)應(yīng)的簽名方法為:Public void onFocusChangeListener(View V, hasFocus)說明:參數(shù) V:參數(shù) V便為觸發(fā)該事件的事件源參數(shù) hasFocus:參數(shù)hasFocus 表示v的新狀態(tài),即 v 是否獲得焦點(diǎn)。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,/實(shí)現(xiàn)了接口中的方法hasFocus) if(v.getId() = R.id.button01)/改變的是button01時(shí)myTextView.setText(您選中了羊!);else if(v.getId() = R.id.button02)/改變的是button02時(shí) myTextView.setText(您選中了豬!);else if(v.getId() = R.id.button03)/改變的是button03時(shí) myTextView.setText(您選中了牛!);else if(v.getId() =
59、 R.id.button04)/改變的是button04時(shí) myTextView.setText(您選中了鼠!);else/其他情況 myTextView.setText();OnKeyListenerOnKeyListener 是對(duì)的接口,通過對(duì)某個(gè) View鍵盤進(jìn)行該簡(jiǎn)體ing,當(dāng) View 獲得焦點(diǎn)并有鍵盤事件時(shí),便會(huì)觸發(fā)該接口中的回調(diào)方法。該接口中的回調(diào)方法如下:public說明:onkey(View v,keyCode,KeyEvent event);參數(shù) V:參數(shù) v 為時(shí)間按的事件源控件。參數(shù) keyCode:參數(shù) keyCode 為鍵盤的鍵碼。參數(shù) event:參數(shù) event
60、 便為鍵盤事件封裝類的對(duì)象,其中包含了事件的詳細(xì)信息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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版商鋪購(gòu)買意向定金合同模板3篇
- 2024年版校車租賃合同范本
- 二零二五版車輛行駛安全協(xié)議及事故責(zé)任認(rèn)定3篇
- 二零二五年度甜品店經(jīng)營(yíng)管理權(quán)及專利轉(zhuǎn)讓合同3篇
- 2024授權(quán)簽訂合同的委托書
- 二零二五年燈具及五金配件銷售合同3篇
- 二零二五年快餐外賣平臺(tái)加盟與合作協(xié)議3篇
- 瀟湘職業(yè)學(xué)院《用戶畫像與精準(zhǔn)營(yíng)銷》2023-2024學(xué)年第一學(xué)期期末試卷
- 西藏藏醫(yī)藥大學(xué)《鍋爐原理及設(shè)備》2023-2024學(xué)年第一學(xué)期期末試卷
- 溫州醫(yī)科大學(xué)《中醫(yī)護(hù)理技能》2023-2024學(xué)年第一學(xué)期期末試卷
- 《經(jīng)濟(jì)法基礎(chǔ)》全套教學(xué)課件
- 2024年618調(diào)味品銷售數(shù)據(jù)解讀報(bào)告-星圖數(shù)據(jù)x味動(dòng)中國(guó)組委會(huì)-202406
- 雙方結(jié)清賠償協(xié)議書
- 2024年河北省中考物理試卷附答案
- 安徽省安慶四中學(xué)2024年中考猜題數(shù)學(xué)試卷含解析
- GB/T 44052-2024液壓傳動(dòng)過濾器性能特性的標(biāo)識(shí)
- PLM項(xiàng)目產(chǎn)品全生命周期建設(shè)方案
- 納布啡在急性疼痛控制中的應(yīng)用
- 20K607 防排煙及暖通防火設(shè)計(jì)審查與安裝
- 國(guó)際市場(chǎng)營(yíng)銷環(huán)境案例分析
- 2024年寧波開發(fā)投資集團(tuán)有限公司招聘筆試參考題庫(kù)附帶答案詳解
評(píng)論
0/150
提交評(píng)論