下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第九章Android處理消息提示12BroadcastReceiver組件Android
線程3Service組件4應(yīng)用開發(fā)步驟及案例5第九章
Android
處理Android系統(tǒng)提供一套友好的消息提示機(jī)制,不會打斷用戶當(dāng)前的操作。常用的方式Toast一種快速的即時消息。消息內(nèi)容簡短。懸浮于應(yīng)用程序的最上方。不獲得焦點。Notification消息內(nèi)容顯示于
的狀態(tài)欄中。按住狀態(tài)欄往下拉,可以查看系統(tǒng)的提示消息。消息提示Toast對象Toast類在android.widget包下。Toast對象的創(chuàng)建通過makeText()方法實現(xiàn)。Toast對象通過show()方法顯示在屏幕上。Toast對象一般用于某項操作執(zhí)行后是否成功的消息提示。實例1:在ZSWB_Diary2中,添加Toast對象:當(dāng)刪除一條日志操作時給出提示。項目名為:ZSWB_Diary3。消息提示第九章
Android
處理狀態(tài)條中。創(chuàng)建Notification對象Notification類在android.app包下。Notification無須Activity,將消息內(nèi)容顯示在創(chuàng)建Notification對象:方法一:Notification
mynotification=newNotification(icon,ticker,when);其中:icon是顯示在狀態(tài)欄中的圖標(biāo),一般通過資源id表示。ticker是消息的文本內(nèi)容。when是系統(tǒng)時間,一般可用System.currentTimeMillis()獲得。方法二:Notification
mynotification=newNotification();mynotification.icon=R.drawable.header;mynotification.tickerText=getResources().getString(R.string.notification);…消息提示第九章
Android
處理第九章
Android
處理Notification包含如下功能:創(chuàng)建新的狀態(tài)欄圖標(biāo);在擴(kuò)展的狀態(tài)條窗口顯示額外的信息(也可以啟動另一個Intent);,發(fā)出聲音(鈴聲,其它提示形式:閃爍/LED,讓庫歌曲)等。設(shè)置Notification對象缺省表現(xiàn)形式:Notification.DEFAULT_VIBRATE:Notification顯示時伴隨振動。Notification.DEFAULT_SOUND:Notification顯示時伴隨音樂。Notification.DEFAULT_ALL:Notification顯示時伴隨振動和音樂。例:mynotification.defaults=
Notification.DEFAULT_SOUND;模擬器不支持
。消息提示由Notification啟動另一活動設(shè)置點擊狀態(tài)欄中的Notification時發(fā)送的Intent對象。例如,當(dāng)點擊狀態(tài)欄的Notification時啟動另一個活動,該活動名為NotifiedActivity。代碼如下:Intent
i
=
new
Intent(this,
NotifiedActivity.class);PendingIntent
pi
=
PendingIntent.getActivity(this,
0,
i,
0);PendingIntent:PendingIntent就是一個Intent的描述,相當(dāng)于對intent執(zhí)行了包裝,不一定一定要馬上執(zhí)行它,其包裝后,傳遞給其他activity或application。點擊狀態(tài)欄中的Notification啟動另一個活動。代碼如下:myNotification.setLatestEventInfo(this,"示例","點擊查看",pi);setLatestEventInfo:設(shè)置顯示在拉伸狀態(tài)欄中的Notification對象的屬性,單擊后將發(fā)送PendingIntent對象。。消息提示第九章
Android
處理NotificationManager
notificationManager
=(NotificationManager)getSystemService(NOTIFICATION_SERVICE);notificationManager.notify(0,myNotification);
//發(fā)送Notification第九章
Android
處理NotificationManager所有的Notification都由NotificationManager來管理,通過NotificationManager顯示出來。例:NotificationManager常用方法消息提示方法描述cancel(int
id)取消以前顯示的一個NotificationcancelAll()取消以前顯示的一個所有NotificationgetSystemService(NOTIFICATION_SERVICE)初始化一個NotificationManager對象notify(int
id,
Notificationnotification)把Notification持久地發(fā)送到狀態(tài)條上第九章
Android
處理使用Notification和NotificationManager的基本步驟:⑴獲取NotificationManager對象。⑵創(chuàng)建一個Notification對象。⑶設(shè)置Notification的各個屬性:設(shè)置在狀態(tài)條(Status
Bar)顯示
文本提示設(shè)置發(fā)出提示音設(shè)置
振動設(shè)置LED燈閃爍設(shè)置對通知的單擊事件處理⑷發(fā)送通知。消息提示第九章
Android
處理BroadcastReceiverBroadcastReceiver是對廣播消息進(jìn)行過濾并響應(yīng)的控件。BroadcastReceiver類位于android.content包下。實現(xiàn)自己的BroadcastReceiver必須要
。
方式:動態(tài)
:在Java代碼中
。(靈活)靜態(tài)
:在AndroidManifest.xml中
。(常用)開發(fā)與BroadcastReceiver相關(guān)的程序,主要的工作是對onReceive()方法進(jìn)行重寫。注意:在onReceive()中執(zhí)行的代碼耗時不要超過5秒。BroadcastReceiver組件BroadcastReceiver組件第九章
Android
處理發(fā)送廣播的方式用sendBroadcast和sendStickyBroadcast發(fā)送廣播:所有滿足條件的BroadcastReceiver都會執(zhí)行其onReceive()方法來處理響應(yīng),是對廣播消息進(jìn)行過濾并響應(yīng)的控件。當(dāng)有多個滿足條件的BroadcastReceiver時,不能保證其onReceive()方法的執(zhí)行順序。用sendOrderBroadcast發(fā)送:通過sendOrderBroadcast發(fā)送的Intent,會根據(jù)BroadcastReceiver
時IntentFilter設(shè)置的優(yōu)先級順序來執(zhí)行onReceive()方法。對于相同優(yōu)先級的BroadcastReceiver,不能保證其onReceive()方法的執(zhí)行順序。sendStickyBroadcast與其它發(fā)送方式的不同之處:Intent在發(fā)送之后一直存在,并且在以后調(diào)用registerReceive注冊相匹配的Receive時會把這個Intent直接返回給新
的Receive。BroadcastReceiver組件第九章
Android
處理接收廣播服務(wù)的過程開發(fā)BroadcastReveiver類的子類,在其中重載onReceive()方法;在AndroidManifest.xml中
BroadcastReceiver對象;動態(tài)
:通過調(diào)用registerReceiver()方法來
。代碼如:MyReceiver
receiver=new
MyReceiver();
//創(chuàng)建相關(guān)對象
IntentFilter
filter=newIntentFilter();filter.addAction(DATE_CHANGED);registerReceiver(receiver,
filter);
//動態(tài)
BroadcastReceiver靜態(tài)
:在AndroidManifest.xml中添加
:<receiver
android:name=".MyReceiver"><intent-filter><action
android:name="ent.action.DATE_CHANGED"/><category
android:name="ent.category.HOME"/></intent-filter></receiver>接收廣播服務(wù)的過程兩種 方式比較:動態(tài)
方式特點:在代碼中進(jìn)行
后,當(dāng)應(yīng)用程序關(guān)閉后,就不再進(jìn)行
。靜態(tài)
方式的特點:在應(yīng)用程序安裝之后,無論該應(yīng)用程序是否處于活動狀態(tài),BroadcastReceiver始終處于被 狀態(tài)。在AndroidManifest.xml中為應(yīng)用程序添加適當(dāng)?shù)臋?quán)限;<uses-permission
android:name=“android.permission.WRITE_SETTINGS”/>等待接收廣播。
的BroadcastReceiver并非一直在
運(yùn)行,一旦當(dāng)事件或相關(guān)的Intent傳來,就會被系統(tǒng)調(diào)用,處理onReceive()方法里的響應(yīng)事件。BroadcastReceiver組件第九章
Android
處理BroadcastReceiver組件第九章
Android
處理實例2:通過一個按鈕來發(fā)出一個廣播信息,并將它顯示在狀態(tài)欄中??梢詥螕粢粋€按鈕,清除狀態(tài)欄中 信息。BroadcastReceiver組件沒有提供可視化的界面來顯示廣播信息,但可以使用Notification來實現(xiàn)廣播信息的顯示,提示音,閃爍
和振動等消息提示。本例使用狀態(tài)欄顯示廣播信息。項目名:BroadcastRec_Demo定義兩個類:BroadcastRec_DemoActivity.java,是一個Activity類,在其中
構(gòu)建案例中需要廣播的Intent,然后在按鈕的onClick()方法中使用
sendBroadcast()方法發(fā)送出去,并且在該類的onResume()方法中
廣播
。MyReceiver.java,是一個繼承BroadcastReceiver的子類,在該子類的onReceive()方法中將傳入的廣播Intent中的
給一個通知對象。Android線程線程是比進(jìn)程更小的執(zhí)行單位。主線程當(dāng)一個程序首次啟動時,Android會啟動一個LINUX進(jìn)程和一個主線程。主線程負(fù)責(zé)處理與UI相關(guān)的事件,并把相關(guān)的事件分發(fā)到對應(yīng)的組件進(jìn)行處理。所以主線程通常又被叫做UI線程。Android
UI操作必須在UI線 執(zhí)行。Android的UI是單線程(Single-threaded)的。子線程非UI線程即為子線程,子線程一般都是 線程。運(yùn)用子線程的場合:進(jìn)行數(shù)據(jù)、系統(tǒng)等其他非UI的操作。把所有運(yùn)行慢的、耗時的操作移出主線程,放到子線
。第九章Android處理Android線程Handler消息傳遞機(jī)制Android的子線程不能直接操作UI。如果需要可以嘗試使用Handler消息傳遞機(jī)制。Handler消息傳遞機(jī)制:一個Handler對應(yīng)一個Activity。自定義的
線程可與Handler通信,Handler將與UI線程一起工作。Handler類位于android.os包下。Handler的常用方法方法返回類型描述handlerMessage(Message
msg)void子類對象通過該方法接收消息sendEmptyMessage(int
what)boolean發(fā)送一個只含有what值的消息sendMessage(Message
msg)boolean發(fā)送消息到HandlerhasMessages(int
what)boolean監(jiān)測消息隊列中是否還有what值的消息Post(Runnabler)boolean將一個線程添加到消息隊列中第九章Android處理Android線程Handler的使用開發(fā)Handler類的步驟:⑴在Activity或Activity的Widget中開發(fā)Handler類的對象,重載handlerMessage方法。⑵
在新啟動的線
調(diào)用sendEmptyMessage或sendMessage方法向Handler發(fā)送消息。⑶
Handler類的對象用handlerMessage方法接收消息,然后根據(jù)消息的執(zhí)行相應(yīng)的操作。第九章Android處理Android
線程第九章
Android
處理實例3:使用Handler機(jī)制以幻燈片的形式顯示IT界的名人,每張 停留3秒鐘。項目名:ThreadDemo定義兩個類:Activity類:ThreadDemoActivity.java繼承Thread的子類:MyThread.java三秒鐘之后Android線程Asyn
kAsynAsynk是抽象類,位于android.os包下。k是一種簡單的實現(xiàn) 運(yùn)行事務(wù)的方式。利用Asyn
k 不需要自己來寫 線程,無需終結(jié)線程。有效地避免了使用Handler帶來的麻煩。Asyn在主線k的特點是任務(wù)在主線程之外運(yùn)行,而通過回調(diào)方法執(zhí)行。子類必須實現(xiàn)抽象方法
nBackground(Params…
p)
,這個方法是必須要重寫的,用來在
線 處理一些耗費時間的事情。Asyn
k的執(zhí)行分為若干步驟,每一步都對應(yīng)一個回調(diào)方法,這些方法需要重寫。注意:在任務(wù)的執(zhí)行過 ,這些方法不由應(yīng)用程序調(diào)用,而是被自動調(diào)用的。第九章Android處理Android線程k的常用方法AsynAsynk定義了三種范式類型,被用于一個異步任務(wù)。Params:當(dāng)執(zhí)行時,參數(shù)類型發(fā)送到任務(wù),比如HTTP請求的URL。Progress:在
計算期間, 任務(wù)執(zhí)行的百分比。Result:
計算的結(jié)果類型,比如String。Asyn k常用的需要重載的方法:方法描述onPreExecute()當(dāng)任務(wù)執(zhí)行之前開始調(diào)用此方法,可以在這里顯示進(jìn)度
框此方法在 線程執(zhí)行,完成任務(wù)的主要工作,通常需要較長的時間。在執(zhí)行過 可以調(diào)用nBackground(Params…)publicProgress(Progress…)來更新任務(wù)的進(jìn)度onProgressUpdate(Progress…)此方法在主線程執(zhí)行,用于顯示任務(wù)執(zhí)行的進(jìn)度onPostExecute(Result)此方法在主線程執(zhí)行,任務(wù)執(zhí)行的結(jié)果作為此方法的參數(shù)返回第九章Android處理Android線程Asyn k使用步驟一個Asyn k運(yùn)行的過⑴
onPreExecute()在execute調(diào)用后立即在ui線,經(jīng)歷了4個步驟:執(zhí)行。這步通常被用于設(shè)置任務(wù)。⑵
nBackground(Params...)當(dāng)onPreExecute()
執(zhí)行完成后,立即在
線 運(yùn)行。這步被用于執(zhí)行較長時間的
計算。異步任務(wù)的參數(shù)也被傳到這步。計算的可以調(diào)用結(jié)果必須在這步返回,將傳回到上一步。在執(zhí)行過publishProgress(Progress...)來更新任務(wù)的進(jìn)度。⑶
onProgressUpdate(Progress...)在調(diào)用publishProgress后,在UI線
運(yùn)行。執(zhí)行的時機(jī)是不確定的。當(dāng)
計算還在進(jìn)行時,這個方法用于在用戶界面顯示進(jìn)度。⑷
onPostExecute(Result)當(dāng)
計算結(jié)束時,調(diào)用UI線程。
計算結(jié)果作為一個參數(shù)傳遞到這步。第九章Android處理Android線程Asyn k使用規(guī)則必須遵守一些線程規(guī)則,Asynk類才能正確的工作。Asyn k
任務(wù)實例必須創(chuàng)建在UI線
。execute(Params...)必須在UI線程上調(diào)用。不要手動調(diào)用下列方法:onPreExecute()onPostExecute(Result)nBackground(Params...)onProgressUpdate(Progress...)每個AsynAsynk只能有1個實例被執(zhí)行,同時運(yùn)行2個以上的k,將會拋出異常。第九章Android處理Android線程實例4:使用Asyn
k來完成進(jìn)度由于使用Asyn k,任務(wù)在 運(yùn)行,執(zhí)行過程的,本例在代碼中增加了輸出Log的操作,便于大家看到其執(zhí)行過程。項目名:Asyn
k_PgDialog在Eclipse的LogCat窗口中可以看到
操作過程的日志記錄信息:第九章
Android
處理框的進(jìn)度更新操作。臺界面是看不到ServiceService是運(yùn)行的,沒有用戶交互界面的“服務(wù)”。如:音樂;檢測SD卡上文件的變化;數(shù)據(jù)計算,如記錄用戶的地理信息位置的改變;發(fā)出Notification。Service一般由Activity啟動,但不依賴于Activity。也可以由其他的Service或者Broadcast
Receiver啟動。Service的生命周期Service的生命周期方法比Activity要少一些,只在:onCreate()onStart()onDestroy()Service組件第九章
Android
處理經(jīng)SeService的啟動方式:通過startService啟動啟動時,依次調(diào)用onC注意:如果Service已會再執(zhí)行onCreate()方Android2.0以后用on啟動時會自動調(diào)用該S停止時直接進(jìn)入onDes無論之前調(diào)用了幾次st結(jié)束該Service。通過bindService啟動啟動時只運(yùn)行onCreat停止時,依次調(diào)用onUService組件第九章
Android
處理第九章
Android
處理Service的進(jìn)程優(yōu)先級如果service正在調(diào)用onCreate()、onStart()或onDestory()方法,那么用于當(dāng)前service的進(jìn)程則變?yōu)榍芭_進(jìn)程以避免被
killed。如果service已經(jīng)被啟動,擁有它的進(jìn)程僅比可見的進(jìn)程低,而比不可見的進(jìn)程重要,這就意味著service一般不會被killed.如果客戶端已經(jīng)連接到service,那么擁有它的進(jìn)程則擁有最高的優(yōu)先級,可以認(rèn)為該service是可見的。如果service可以使用startForeground(int,Notification)方法
來將service設(shè)置為前臺狀態(tài),那么系統(tǒng)就認(rèn)為是對用戶可見的,并不會在內(nèi)存不足時killed。Service組件創(chuàng)建Service子類需要重寫的方法onBind(Intent
intent)該方法是必須實現(xiàn)的方法,返回一個綁定的接口給Service。onCreate()該方法是當(dāng)Service第一次被創(chuàng)建時,由系統(tǒng)調(diào)用。onStart(Intent
intent,
int
startId)該方法是當(dāng)startService()方法啟動Service時,該方法被調(diào)用。onDestroy()該方法是當(dāng)Service不再使用時,由系統(tǒng)調(diào)用。Service組件在應(yīng)用程序中使用Service,需要在AndroiManifest.xml文件中顯式地
<service>
。Service組件第九章
Android
處理啟動和停止Service啟動Service顯式啟動。通過類名稱,例如:Intent
myIntent=new
Intent(this,
MyService.class);myIntent.putExtra(“TOP
”,”Margherita”);startService(myIntent);隱式啟動。通過Intent
Filter,例如:startService(new
Intent(this,
MyService.class));停止Service使用stopSelf()方法使用stopService()方法,例如:stopService(new
Intent(this,
MyService.class));Service組件第九章
Android
處理第九章Android實例5:Service與BroadcastReceiver聯(lián)合應(yīng)用功能:通過按鈕啟動Service,Service運(yùn)行兩分鐘后停止,或通過點擊
“停止Service”按鈕中止Service;動態(tài)
一個BroadcastReceiver;通過BroadcastReceiver廣播Service運(yùn)行的時間。項目:項目名:Service_BroadcastDemo資源:需要預(yù)設(shè)按鈕字符串代碼:Service_Broad_Demo.javaMyService.java注意:在AndroidManifest.xml中需要
Service組件:<service
android:name=“.MyService”/>處理Service組件第九章Android開發(fā)Android應(yīng)用項目,首先需要整理以下內(nèi)容:項目有哪些功能;需要哪些用戶界面;各界面之間跳轉(zhuǎn)的流程;需要的數(shù)據(jù)及其數(shù)據(jù)的來源和格式;是否需要服務(wù)端的支持;是否需要本地數(shù)據(jù)庫的支持;是否需要特殊的權(quán)限;是否需要 進(jìn)程等。在進(jìn)入具體的編碼前,需要形成相關(guān)開 檔,描述上面涉及的問題。處理應(yīng)用開發(fā)步驟及案例開發(fā)步驟⑴用戶界面設(shè)計按照項目規(guī)劃文檔,使用XML文件描述出Android的用戶界面:布局模式、視圖組件、填充的數(shù)據(jù)等。⑵準(zhǔn)備需要的資源⑶數(shù)據(jù)操作和數(shù)據(jù)來源(SharedPreferences、數(shù)據(jù)庫、ContentProvider、網(wǎng)絡(luò)等)及
開發(fā)。⑷多頁面的跳轉(zhuǎn)實現(xiàn)實現(xiàn)各個界面直接的調(diào)用和跳轉(zhuǎn)流程。⑸增加Service實現(xiàn)項目需要的Service。第九章
Android
處理應(yīng)用開發(fā)步驟及案例開發(fā)步驟⑹完善應(yīng)用細(xì)節(jié)從網(wǎng)絡(luò)上獲取數(shù)據(jù),在manifest.xml中需要添加相關(guān)的uses-permission;老版本更新,在manifest.xml中需要更新versionCode,versionName;…⑺應(yīng)用測試使用模擬器和Eclipse中的DDMS功能。⑻打包發(fā)布第九章
Android
處理應(yīng)用開發(fā)步驟及案例音樂器實例實例6:設(shè)計一個單機(jī)版的音樂 器。功能:對指定的音樂進(jìn)行
、暫停、停止控制;顯示歌曲的相關(guān)信息;按下
鍵時,彈出“退出”選項菜單,退出時需要有退出確認(rèn)
框。界面設(shè)計:只使用一個用戶界面main.xml;為配合歌曲內(nèi)容,設(shè)置背景;在界面的頂端放置按鈕和歌曲主要信息左邊并排放置兩按鈕,
“
”和“暫?!痹O(shè)置為一個按鈕的兩種狀態(tài);右邊縱向放置歌曲名稱、歌唱人、作詞作曲人
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 下學(xué)期教皇的奶牛-課件
- 《證券投資相關(guān)》課件
- 《湖泊的水文特征》課件
- 《語文下冊《雪》魯迅》課件
- 七年級英語上冊期末復(fù)習(xí)課件
- 單位管理制度集粹選集人力資源管理
- 單位管理制度匯編大全人力資源管理篇
- 單位管理制度合并匯編【人事管理篇】
- 單位管理制度范文大合集員工管理篇
- 單位管理制度范例匯編人事管理篇
- 中國特色大國外交和推動構(gòu)建人類命運(yùn)共同體
- 《軟件工程》教案(本科)
- 粗粒土和巨粒土最大干密度記錄表及報告
- 愛麗絲夢游仙境話劇中英文劇本(共6頁)
- 書法少年宮活動記錄
- 表冷器性能計算書
- 走遍德國 A1(課堂PPT)
- 照明公司個人工作總結(jié)范文
- 熱控專業(yè)施工質(zhì)量驗收范圍劃分表
- 2022年sppb簡易體能狀況量表
- 各類傳染病個案調(diào)查表集
評論
0/150
提交評論