首頁(yè) 收藏 QQ群
 網(wǎng)站導(dǎo)航

ZNDS智能電視網(wǎng) 推薦當(dāng)貝市場(chǎng)

TV應(yīng)用下載 / 資源分享區(qū)

軟件下載 | 游戲 | 討論 | 電視計(jì)算器

綜合交流 / 評(píng)測(cè) / 活動(dòng)區(qū)

交流區(qū) | 測(cè)硬件 | 網(wǎng)站活動(dòng) | Z幣中心

新手入門 / 進(jìn)階 / 社區(qū)互助

新手 | 你問我答 | 免費(fèi)刷機(jī)救磚 | ROM固件

查看: 10128|回復(fù): 0
上一主題 下一主題
[教程]

Android開發(fā)筆記第四篇(應(yīng)用解析)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2013-8-28 16:27 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
活動(dòng)是最基本的 Android 應(yīng)用程序組件,應(yīng)用程序中,一個(gè)活動(dòng)通常就是一個(gè)單獨(dú)的屏幕。每一個(gè)活動(dòng)
都被實(shí)現(xiàn)為一個(gè)獨(dú)立的類,并且從活動(dòng)基類中繼承而來,活動(dòng)類將會(huì)顯示由視圖控件組成的用戶接口,并對(duì)
事件做出響應(yīng)。大多數(shù)的應(yīng)用是由多個(gè)屏幕顯示組成。例如:一個(gè)文本信息的應(yīng)用也許有一個(gè)顯示發(fā)送消息的
聯(lián)系人列表屏幕,第二個(gè)屏幕用來寫文本消息和選擇收件人,再來一個(gè)屏幕查看消息歷史或者消息設(shè)置操作
等。這里每一個(gè)這樣的屏幕就是一個(gè)活動(dòng),很容易實(shí)現(xiàn)從一個(gè)屏幕到一個(gè)新的屏幕并且完成新的活動(dòng)。在某
些情況下當(dāng)前的屏幕也許需要向上一個(gè)屏幕活動(dòng)提供返回值--比如讓用戶從手機(jī)中挑選一張照片返回通訊錄
做為電話撥入者的頭像。
當(dāng)一個(gè)新的屏幕打開后,前一個(gè)屏幕將會(huì)暫停,并保存在歷史堆棧中。用戶可以返回到歷史堆棧中的前
一個(gè)屏幕。當(dāng)屏幕不再使用時(shí),還可以從歷史堆棧中刪除。默認(rèn)情況下,Android 將會(huì)保留從主屏幕到每一
個(gè)應(yīng)用的運(yùn)行屏幕。
簡(jiǎn)單理解 Activity 代表一個(gè)用戶所能看到的屏幕,Activity 主要是處理一個(gè)應(yīng)用的整體性工作,例如,監(jiān)
聽系統(tǒng)事件(按鍵事件、觸摸屏事件等)、為用戶顯示指定的 View,啟動(dòng)其他 Activity 等。所有應(yīng)用的 Activity
都繼承于android.app.Activity 類,該類是 Android 提供的基層類,其他的 Activity 繼承該父類后,通過 Override
父類的方法來實(shí)現(xiàn)各種功能,這種設(shè)計(jì)在其他領(lǐng)域也較為常見。
調(diào)用 Android 專有類 Intent 進(jìn)行架構(gòu)屏幕之間的切換。Intent 是描述應(yīng)用想要做什么。Intent 數(shù)據(jù)結(jié)構(gòu)兩
個(gè)最重要的部分是動(dòng)作和動(dòng)作對(duì)應(yīng)的數(shù)據(jù)。典型的動(dòng)作類型有:MAIN(活動(dòng)的門戶)、 VIEWPICK、EDIT
等。而動(dòng)作對(duì)應(yīng)的數(shù)據(jù)則以 URI 的形式進(jìn)行表示。例如:要查看某個(gè)人的聯(lián)系方式,你需要?jiǎng)?chuàng)建一個(gè)動(dòng)作類
型為 VIEW Intent,以及一個(gè)表示這個(gè)人的 URI。
Android 使用了 Intent 這個(gè)特殊類,實(shí)現(xiàn)在屏幕與屏幕之間移動(dòng)。Intent 類用于描述一個(gè)應(yīng)用將會(huì)做什么
事。在 Intent 的描述結(jié)構(gòu)中,有兩個(gè)最重要的部分:動(dòng)作和動(dòng)作對(duì)應(yīng)的數(shù)據(jù)。典型的動(dòng)作類型有: AINactivity
的門戶)、 VIEWPICK、EDIT 等。而動(dòng)作對(duì)應(yīng)的數(shù)據(jù)則以 URI 的形式進(jìn)行表示。例如:要查看一個(gè)人的聯(lián)
系方式,你需要?jiǎng)?chuàng)建一個(gè)動(dòng)作類型為 VIEW intent,以及一個(gè)表示這個(gè)人的 URI。
與之有關(guān)系的一個(gè)類叫 IntentFilter。相對(duì)于 intent 是一個(gè)有效的做某事的請(qǐng)求,一個(gè) intentfilter 則用于描
述一個(gè) activity(或者 IntentReceiver)能夠操作哪些 intent。一個(gè) activity 如果要顯示一個(gè)人的聯(lián)系方式時(shí),需
要聲明一個(gè) IntentFilter,這個(gè) IntentFilter 要知道怎么去處理 VIEW 動(dòng)作和表示一個(gè)人的 URIIntentFilter
要在AndroidManifest.xml 中定義。
通過解析各種 intent,從一個(gè)屏幕導(dǎo)航到另一個(gè)屏幕是很簡(jiǎn)單的。當(dāng)向前導(dǎo)航時(shí), activity 將會(huì)調(diào)用
startActivity(IntentmyIntent)方法。然后,系統(tǒng)會(huì)在所有安裝的應(yīng)用程序中定義的 IntentFilter 中查找,找到最
匹配 myIntent Intent 對(duì)應(yīng)的 activity。新的 activity 接收到 myIntent 的通知后,開始運(yùn)行。當(dāng) startActivity
法被調(diào)用將觸發(fā)解析 myIntent 的動(dòng)作,這個(gè)機(jī)制提供了兩個(gè)關(guān)鍵好處:
A、Activities 能夠重復(fù)利用從其它組件中以 Intent 的形式產(chǎn)生的一個(gè)請(qǐng)求;
B、Activities 可以在任何時(shí)候被一個(gè)具有相同 IntentFilter 的新的 Activity 取代。
當(dāng)你希望你的應(yīng)用能夠?qū)σ粋€(gè)外部的事件(如當(dāng)電話呼入時(shí),或者數(shù)據(jù)網(wǎng)絡(luò)可用時(shí),或者到了晚上時(shí))做出響
應(yīng),你可以使用一個(gè) IntentReceiver。雖然 IntentReceiver 在感興趣的事件發(fā)生時(shí),會(huì)使用NotificationManager通知用戶,但它并不能生成一個(gè) UI。IntentReceiver 在AndroidManifest.xml 中注冊(cè),但也可以在代碼中使用
Context.registerReceiver()進(jìn)行注冊(cè)。當(dāng)一個(gè) intentreceiver 被觸發(fā)時(shí),你的應(yīng)用不必對(duì)請(qǐng)求調(diào)用 intentreceiver,
系統(tǒng)會(huì)在需要的時(shí)候啟動(dòng)你的應(yīng)用。各種應(yīng)用還可以通過使用Context.broadcastIntent() 將它們自己的
intentreceiver 廣播給其它應(yīng)用程序。
一個(gè) Service 是一段長(zhǎng)生命周期的,沒有用戶界面的程序。比較好的一個(gè)例子就是一個(gè)正在從播放列表中
播放歌曲的媒體播放器。在一個(gè)媒體播放器的應(yīng)用中,應(yīng)該會(huì)有多個(gè) activity,讓使用者可以選擇歌曲并播放
歌曲。然而,音樂重放這個(gè)功能并沒有對(duì)應(yīng)的 activity,因?yàn)槭褂谜弋?dāng)然會(huì)認(rèn)為在導(dǎo)航到其它屏幕時(shí)音樂應(yīng)該
還在播放的。在這個(gè)例子中,媒體播放器這個(gè) activity 會(huì)使用Context.startService()來啟動(dòng)一個(gè) service,從而
可以在后臺(tái)保持音樂的播放。同時(shí),系統(tǒng)也將保持這個(gè) service 一直執(zhí)行,直到這個(gè) service 運(yùn)行結(jié)束。另外,
我們還可以通過使用Context.bindService()方法,連接到一個(gè) service 上(如果這個(gè) service 還沒有運(yùn)行將啟動(dòng)它)。當(dāng)連接到一個(gè) service 之后,我們還可以 service 提供的接口與它進(jìn)行通訊。拿媒體播放器這個(gè)例子來說,
我們還可以進(jìn)行暫停、重播等操作。
Android 應(yīng)用程序能夠?qū)⑺鼈兊臄?shù)據(jù)保存到文件、SQLite 數(shù)據(jù)庫(kù)中,甚至是任何有效的設(shè)備中。當(dāng)你想
將你的應(yīng)用數(shù)據(jù)與其它的應(yīng)用共享時(shí),內(nèi)容提供器就可以發(fā)揮作用了。因?yàn)閮?nèi)容提供器類實(shí)現(xiàn)了一組標(biāo)準(zhǔn)的
方法,從而能夠讓其它的應(yīng)用保存或讀取此內(nèi)容提供器處理的各種數(shù)據(jù)類型。
數(shù)據(jù)是應(yīng)用的核心。在 Android 中,默認(rèn)使用鼎鼎大名的 SQLite 作為系統(tǒng) DB。但是在 Android 中,使用方
法有點(diǎn)小小的不一樣。在 Android 中每一個(gè)應(yīng)用都運(yùn)行在各自的進(jìn)程中,當(dāng)你的應(yīng)用需要訪問其他應(yīng)用的數(shù)
據(jù)時(shí),也就需要數(shù)據(jù)在不同的虛擬機(jī)之間傳遞,這樣的情況操作起來可能有些困難(正常情況下,你不能讀取
其他的應(yīng)用的 db 文件),ContentProvider 正是用來解決在不同的應(yīng)用包之間共享數(shù)據(jù)的工具。
   
   
所有被一個(gè) Android 應(yīng)用程序創(chuàng)建的偏好設(shè)置,文件和數(shù)據(jù)庫(kù)都是私有的。
為了和其他應(yīng)用程序共享數(shù)據(jù),應(yīng)用程序不得不創(chuàng)建一個(gè) ContentProvider要回索其他應(yīng)用程序的數(shù)據(jù),它自己的 ContentProvider 必須被調(diào)用Android 本地 ContentProvider 包括:   
CallLog:地址和接收到的電話信息
Contact.People.Phones:存儲(chǔ)電話號(hào)碼
Setting.System:系統(tǒng)設(shè)置和偏好設(shè)置
等等
</div

上一篇:如何單獨(dú)編譯Android源代碼中的模塊
下一篇:二維碼簡(jiǎn)化

本版積分規(guī)則

Archiver|新帖|標(biāo)簽|軟件|Sitemap|ZNDS智能電視網(wǎng) ( 蘇ICP備2023012627號(hào) )

網(wǎng)絡(luò)信息服務(wù)信用承諾書 | 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證:蘇B2-20221768 丨 蘇公網(wǎng)安備 32011402011373號(hào)

GMT+8, 2024-10-20 13:37 , Processed in 0.062560 second(s), 13 queries , Redis On.

Powered by Discuz!

監(jiān)督舉報(bào):report#znds.com (請(qǐng)將#替換為@)

© 2007-2024 ZNDS.Com

快速回復(fù) 返回頂部 返回列表