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

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

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

軟件下載 | 游戲 | 討論 | 電視計算器

綜合交流 / 評測 / 活動區(qū)

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

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

新手 | 你問我答 | 免費刷機救磚 | ROM固件

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

android系統(tǒng)組件介紹

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2013-8-28 16:29 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
6Android開發(fā)四大組件分別是:活動(Activity): 用于表現(xiàn)功能。服務(wù)(Service): 后臺運行服務(wù),不提供界面呈現(xiàn)。廣播接收器(BroadcastReceiver):用于接收廣播。內(nèi)容提供商(Content Provider): 支持在多個應(yīng)用中存儲和讀取數(shù)據(jù),相當(dāng)于數(shù)據(jù)庫。   
  1、 Activity   
  Android 中,Activity 是所有程序的根本,所有程序的流程都運行在Activity 之中,Activity可以算是開發(fā)者遇到的最頻繁,也是Android 當(dāng)中最基本的模塊之一。在Android的程序當(dāng)中,Activity 一般代表手機屏幕的一屏。如果把手機比作一個瀏覽器,那么Activity就相當(dāng)于一個網(wǎng)頁。在Activity 當(dāng)中可以添加一些Button、Check box 等控件??梢钥吹紸ctivity 概念和網(wǎng)頁的概念相當(dāng)類似。   
  一般一個Android 應(yīng)用是由多個Activity 組成的。這多個Activity 之間可以進行相互跳轉(zhuǎn),例如,按下一個Button 按鈕后,可能會跳轉(zhuǎn)到其他的Activity。和網(wǎng)頁跳轉(zhuǎn)稍微有些不一樣的是,Activity 之間的跳轉(zhuǎn)有可能返回值,例如,從Activity A 跳轉(zhuǎn)到Activity B,那么當(dāng)Activity B 運行結(jié)束的時候,有可能會給Activity A 一個返回值。這樣做在很多時候是相當(dāng)方便的。   
  當(dāng)打開一個新的屏幕時,之前一個屏幕會被置為暫停狀態(tài),并且壓入歷史堆棧中。用戶可以通過回退操作返回到以前打開過的屏幕。我們可以選擇性的移除一些沒有必要保留的屏幕,應(yīng)為Android會把每個應(yīng)用的開始到當(dāng)前的每個屏幕保存在堆棧中。   
  2 、Service   
  Service 是android 系統(tǒng)中的一種組件,它跟Activity 的級別差不多,但是他不能自己運行,只能后臺運行,并且可以和其他組件進行交互。Service 是沒有界面的長生命周期的代碼。Service 是一種程序,它可以運行很長時間,但是它卻沒有用戶界面。這么說有點枯燥,來看個例子。打開一個音樂播放器的程序,這個時候若想上網(wǎng)了,那么,我們打開Android 瀏覽器,這個時候雖然我們已經(jīng)進入了瀏覽器這個程序,但是,歌曲播放并沒有停止,而是在后臺繼續(xù)一首接著一首的播放。其實這個播放就是由播放音樂的Service進行控制。當(dāng)然這個播放音樂的Service也可以停止,例如,當(dāng)播放列表里邊的歌曲都結(jié)束,或者用戶按下了停止音樂播放的快捷鍵等。service 可以在和多場合的應(yīng)用中使用,比如播放多媒體的時候用戶啟動了其他Activity這個時候程序要在后臺繼續(xù)播放,比如檢測SD 卡上文件的變化,再或者在后臺記錄你地理信息位置的改變等等,總之服務(wù)嘛,總是藏在后頭的。   
  開啟service有兩種方式:   
  (1) Context.startService():Service會經(jīng)歷onCreate -> onStart(如果Service還沒有運行,則android先調(diào)用onCreate()然后調(diào)用onStart();如果Service已經(jīng)運行,則只調(diào)用onStart(),所以一個Service的onStart方法可能會重復(fù)調(diào)用多次 );stopService的時候直接onDestroy,如果是調(diào)用者自己直接退出而沒有調(diào)用stopService的話,Service會一直在后臺運行。該Service的調(diào)用者再啟動起來后可以通過stopService關(guān)閉Service。 注意,多次調(diào)用Context.startservice()不會嵌套(即使會有相應(yīng)的onStart()方法被調(diào)用),所以無論同一個服務(wù)被啟動了多少次,一旦調(diào)用Context.stopService()或者stopSelf(),他都會被停止。補充說明:傳遞給startService()的Intent對象會傳遞給onStart()方法。調(diào)用順序為:onCreate --> onStart(可多次調(diào)用) --> onDestroy。   
  (2) Context.bindService():Service會經(jīng)歷onCreate() -> onBind(),onBind將返回給客戶端一個IBind接口實例,IBind允許客戶端回調(diào)服務(wù)的方法,比如得到Service運行的狀態(tài)或其他操作。這個時候把調(diào)用者(Context,例如Activity)會和Service綁定在一起,Context退出了,Srevice就會調(diào)用onUnbind -> onDestroyed相應(yīng)退出,所謂綁定在一起就共存亡了 。   
  3、 BroadcastReceiver   
  在Android 中,Broadcast 是一種廣泛運用的在應(yīng)用程序之間傳輸信息的機制。而BroadcastReceiver 是對發(fā)送出來的Broadcast進行過濾接受并響應(yīng)的一類組件。可以使用BroadcastReceiver 來讓應(yīng)用對一個外部的事件做出響應(yīng)。這是非常有意思的,例如,當(dāng)電話呼入這個外部事件到來的時候,可以利用BroadcastReceiver 進行處理。例如,當(dāng)下載一個程序成功完成的時候,仍然可以利用BroadcastReceiver 進行處理。BroadcastReceiver不能生成UI,也就是說對于用戶來說不是透明的,用戶是看不到的。BroadcastReceiver通過NotificationManager 來通知用戶這些事情發(fā)生了。BroadcastReceiver 既可以在AndroidManifest.xml 中注冊,也可以在運行時的代碼中使用Context.registerReceiver()進行注冊。只要是注冊了,當(dāng)事件來臨的時候,即使程序沒有啟動,系統(tǒng)也在需要的時候啟動程序。各種應(yīng)用還可以通過使用Context.sendBroadcast () 將它們自己的intent broadcasts廣播給其他應(yīng)用程序。   
  注冊BroadcastReceiver有兩種方式:   
  (1)在AndroidManifest.xml進行注冊。這種方法有一個特點即使你的應(yīng)用程序已經(jīng)關(guān)閉了,但這個BroadcastReceiver依然會接受廣播出來的對象,也就是說無論你這個應(yīng)用程序時開還是關(guān)都屬于活動狀態(tài)都可以接受到廣播的事件;   
  (2)在代碼中注冊廣播。   
  第一種俗稱靜態(tài)注冊,第二種俗稱動態(tài)注冊,這兩種注冊BroadcastReceiver的區(qū)別:   
  動態(tài)注冊較靜態(tài)注冊靈活。實驗證明:當(dāng)靜態(tài)注冊一個BroadcastReceiver時,不論應(yīng)用程序是啟動與否。都可以接受對應(yīng)的廣播。   
  動態(tài)注冊的時候,如果不執(zhí)行unregisterReceiver();方法取消注冊,跟靜態(tài)是一樣的。但是如果執(zhí)行該方法,當(dāng)執(zhí)行過以后,就不能接受廣播了。   
  4、 Content Provider   
  Content Provider 是Android提供的第三方應(yīng)用數(shù)據(jù)的訪問方案。   
  在Android中,對數(shù)據(jù)的保護是很嚴密的,除了放在SD卡中的數(shù)據(jù),一個應(yīng)用所持有的數(shù)據(jù)庫、文件、等等內(nèi)容,都是不允許其他直接訪問的。Andorid當(dāng)然不會真的把每個應(yīng)用都做成一座孤島,它為所有應(yīng)用都準備了一扇窗,這就是Content Provider。應(yīng)用想對外提供的數(shù)據(jù),可以通過派生ContentProvider類, 封裝成一枚Content Provider,每個Content Provider都用一個uri作為獨立的標識,形如:content://com.xxxxx。所有東西看著像REST的樣子,但實際上,它比REST 更為靈活。和REST類似,uri也可以有兩種類型,一種是帶id的,另一種是列表的,但實現(xiàn)者不需要按照這個模式來做,給你id的uri你也可以返回列表類型的數(shù)據(jù),只要調(diào)用者明白,就無妨,不用苛求所謂的REST。   
  另外,Content Provider不和REST一樣只有uri可用,還可以接受Projection,Selection,OrderBy等參數(shù),這樣,就可以像數(shù)據(jù)庫那樣進行投影,選擇和排序。查詢到的結(jié)果,以Cursor(參見:reference/android/database/Cursor.html )的形式進行返回,調(diào)用者可以移動Cursor來訪問各列的數(shù)據(jù)。   
  Content Provider屏蔽了內(nèi)部數(shù)據(jù)的存儲細節(jié),向外提供了上述統(tǒng)一的接口模型,這樣的抽象層次,大大簡化了上層應(yīng)用的書寫,也對數(shù)據(jù)的整合提供了更方便的途徑。Content Provider內(nèi)部,常用數(shù)據(jù)庫來實現(xiàn),Android提供了強大的Sqlite支持,但很多時候,你也可以封裝文件或其他混合的數(shù)據(jù)。   
  在Android中,ContentResolver是用來發(fā)起Content Provider的定位和訪問的。不過它僅提供了同步訪問的Content Provider的接口。但通常,Content Provider需要訪問的可能是數(shù)據(jù)庫等大數(shù)據(jù)源,效率上不足夠快,會導(dǎo)致調(diào)用線程的擁塞。因此Android提供了一個AsyncQueryHandler(參見:reference/android/content/AsyncQueryHandler.html),幫助進行異步訪問Content Provider

上一篇:Android開發(fā)之旅:android架構(gòu)
下一篇:【轉(zhuǎn)】Android應(yīng)用及應(yīng)用管理
您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

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

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

GMT+8, 2024-11-19 18:22 , Processed in 0.061863 second(s), 15 queries , Redis On.

Powered by Discuz!

監(jiān)督舉報:report#znds.com (請將#替換為@)

© 2007-2024 ZNDS.Com

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