課件-第九章后臺處理_第1頁
課件-第九章后臺處理_第2頁
課件-第九章后臺處理_第3頁
課件-第九章后臺處理_第4頁
課件-第九章后臺處理_第5頁
免費預(yù)覽已結(jié)束,剩余33頁可下載查看

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論