成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Android開發入門:應用程序基礎及組件

移動開發 Android
本篇及介紹Android應用程序的原理及術語,和Android開發的四大組件:Activities、Services、Broadcast receivers和Content providers。這些是作為一個Android的開發人員必須要了解,且深刻理解的東西。

1、應用程序基礎

Android 應用程序是用Java編程語言寫的。編譯后的Java代碼——包括應用程序要求的任何數據和資源文件,通過aapt工具捆綁成一個Android包,歸檔 文件以.apk為后綴。這個文件是分發應用程序和安裝到移動設備的中介或工具,用戶下載這個文件到他們的設備上。一個.apk文件中的所有代碼被認為是一 個應用程序。

aapt:

aapt是Android Asset Packaging Tool的首字母縮寫,這個工具包含在SDK的tools/目錄下。查看、創建、更新與zip兼容的歸檔文件(zip、jar、apk)。它也能將資源文件編譯成二進制包。

盡管你可能不會經常直接使用appt,但是構建腳本(build scripts)和IDE插件會使用這個工具打包apk文件,構成一個Android應用程序。

如需更詳細的使用細節,打開一個終端,進入tools/目錄下,運行命令:

Linux或Mac操作系統:./aapt

Windows:aapt.exe

注意:tools/目錄是指android SDK目錄下的/platforms/android-X/tools/

在許多方面,每個Android應用程序生活在它自己的世界:

  • 默認情況下,每一個應用程序運行在它自己的Linux進程中。當應用程序中的任何代碼需要執行時,Android將啟動進程;當它不在需要和系統資源被其他應用程序請求時,Android將關閉進程。
  • 每個應用程序都有他自己的Java虛擬機(VM),因此應用程序代碼獨立于其他所有應用程序的代碼運行。
  • 默認情況下,每個應用程序分配一個唯一的Linux用戶的ID。權限設置為每個應用程序的文件僅對用戶和應用程序本身可見——雖然也有一些方法可以暴露他們給其他應用程序。

有可能設置兩個應用程序共享一個用戶ID,這種情況下,他們能夠看到對方的文件。為了節省系統 資源,具有相同ID的應用程序也可以安排在同一個Linux進程中,共享同一個VM。

2、應用程序組件

Android的一個主要特點是,一個應用程序可以 利用其他應用程序的元素(假設這些應用程序允許的話)。

例如,如果你的應用程序需要顯示一個圖像的滾動列表,且其他應用程序已經開發了一個合適的滾動條并 可以提供給別的應用程序用,你可以調用這個滾動條來工作,而不用自己開發一個。

你的應用程序不用并入其他應用程序的代碼或鏈接到它。相反,當需求產生時它 只是啟動其他應用程序塊。對于這個工作,當應用程序的任何部分被請求時,系統必須能夠啟動一個應用程序的進程,并實例化該部分的Java對象。

因此,不像其他大多數系統的應用程序,Android應用程序沒有一個單一的入口點(例如,沒有main()函數)。相反,系統能夠實例化和運行需要幾個必要的組 件。有四種類型的組件:

  • 活動(Activities)
  • 服務(Services)
  • 廣播接收者(Broadcast receivers)
  • 內容提供者(Content providers)

然而,并不是所有的應用程序都必須包含上面的四個部分,你的應用程序可以由上面的一個或幾個來 組建。當你決定使用以上哪些組件來構建Android應用程序時,你應該將它們列在AndroidManifest.xml文件中,在這個文件中你可以聲 明應用程序組件以及它們的特性和要求。關于AndroidManifest.xml在Android工程項目的目錄結構的 1.6、AndroidManifest.xml簡單介紹了一下,你可以參考一下。

2.1、活動(Activities)

一個活動表示一 個可視化的用戶界面,關注一個用戶從事的事件。例如,一個活動可能表示一個用戶可選擇的菜單項列表,或者可能顯示照片連同它的標題。一個文本短信應用程序 可能有一個活動,顯示聯系人的名單發送信息;第二個活動,寫信息給選定的聯系人;其他活動,重新查看舊信息或更改設置。雖然他們一起工作形成一個整體的用 戶界面,但是每個活動是獨立于其他活動的。每一個都是作為Activity基類的一個子類的實現。

android.app.Activity 類:因為幾乎所有的活動(activities)都是與用戶交互的,所以Activity類關注創建窗口,你可以用方法 setContentView(View)將自己的UI放到里面。然而活動通常以全屏的方式展示給用戶,也可以以浮動窗口或嵌入在另外一個活動中。有兩個 方法是幾乎所有的Activity子類都實現的:

onCreate(Bundle):初始化你的活動(Activity),比如完成一些圖形的繪制。最重要的是,在這個方法里你通常將用布局資源 (layout resource)調用setContentView(int)方法定義你的UI,和用findViewById(int)在你的UI中檢索你需要編程地 交互的小部件(widgets)。setContentView指定由哪個文件指定布局(main.xml),可以將這個界面顯示出來,然后我們進行相關 操作,我們的操作會被包裝成為一個意圖(Intent),然后這個意圖對應有相關的activity進行處理。

onPause():處理當離開你的活動時要做的事情。最重要的是,用戶做的所有改變應該在這里提交(通常ContentProvider保存數據)。

一個應用程序可能只包含一個活動,或者像剛才提到的短信應用,它可能包含幾個活動。這些活動是什么,以及有多少,當然這取決于它的應用和設計。一般來講, 當應用程序被啟動時,被標記為第一個的活動應該展示給用戶。從一個活動移動到另一個活動由當前的活動完成開始下一個。

每一個活動都有一個默認的窗口。一般來講,窗口會填滿整個屏幕,但是它可能比屏幕小或浮在其他窗口上。一個活動還可以使用額外的窗口——例如彈出式對話框,或當一用戶選擇屏幕上一個特定的項 時一個窗口顯示給用戶重要的信息。

窗口的可視內容是由繼承自View基類的一個分層的視圖—對象提供。每個視圖控件是窗口內的一個特定的矩形空間。父視圖包含和組織子女視圖的布局。

葉子視圖(在分層的底層)繪制的矩形直接控制和響應用戶的操作。因此,一個視圖是活動與用戶交互發生的地方。例如,一個視圖可能顯示一個小的圖片和當用戶點擊圖片時發起一個行為。

Android有一些現成的視圖你可以使用,包括按鈕(buttons)、文本域(text fields)、滾動條(scroll bars)、菜單項(menu items)、復選框(check boxes)等等。通過Activity.setContentView() 方法放置一個視圖層次在一個活動窗口中。內容視圖(content view)是層次結構的根視圖對象。層次結構如下圖所示:

圖1、視圖的層次結構

Activity.setContentView() 方法:

public void setContentView (int layoutResID):根據布局資源設置活動的界面。 資源將被夸大,添加布局資源文件中所有的最高層的視圖( top-level views )到活動.

2.2、 服務(Services)

一個服務沒有一個可視化用戶界面,而是在后臺無期限地運行。例如一個服務可能是播放背景音樂而用戶做其他一些事情,或者它可能從 網絡獲取數據,或計算一些東西并提供結果給需要的活動(activities)。每個服務都繼承自Service基類。

每個服務類在AndroidManifest.xml中有相應的<service>聲明。服務可以通過Context.startService()和Context.bindService()啟動。

一個典型的例子是一個媒體播放器播放一個播放列表中的歌曲。該播放器應用程序將可能有一個或多個活動(activities),允許用戶選擇歌曲和開始播 放。然而,音樂播放本身不會被一個活動處理,因為用戶希望保持音樂繼續播放,當用戶離開播放器去做其他事情時。

為了保持音樂繼續播放,媒體播放器活動可以啟動一個服務運行在后臺。系統將保持音樂播放服務運行,甚至媒體播放器離開屏幕時。可以連接到(綁定到)一個持續運行的服務(并啟動服務,如果它尚未運 行)。

連接之后,你可以通過服務暴露的接口與服務交流。對于音樂服務,這個接口可以允許用戶暫停、倒帶、停止和重新播放。像活動(activities) 和其他組件一樣,服務(services)運行在應用程序進程中的主線程中。因此,他們將不會阻止其他組件或用戶界面,他們往往產生其他一些耗時的任務 (如音樂播放)。

2.3、廣播接收者(Broadcast receivers)

一個廣播接收者是這樣一個組件,它不做什么事,僅是接受廣播公告并作出相應的反應。許多廣播源自于系統代碼,例如公告時區的改變、電 池電量低、已采取圖片、用戶改變了語言偏好。

應用程序也可以發起廣播,例如為了他其他程序知道某些數據已經下載到設備且他們可以使用這些數據。一個應用程序可以有任意數量的廣播接收者去反應任何它認為重要的公告。所有的接受者繼承自BroadcastReceiver基類。

BroadcastReceiver類:

是接受sendBroadcast()發送的意圖(intents)的基類。可以用Context.registerReceiver()動態地注冊這個 類的實例,或者通過AndroidManifest.xml中<receiver>標簽靜態發布。注意:如果你在 Activity.onResume() 注冊一個接受者,你應該在Activity.onPause()注銷它。因為當暫停時你不會收到意圖,注銷它將削減不必要的系統開銷。不要在 Activity.onSaveInstanceState()中注銷它,因為它將不會被調用,如果用戶移動到先前的堆棧。

有兩種主要的可接受廣播類型:

正常廣播(由Context.sendBroadcast發送)是完全異步的。所有的廣播接收者以無序方式運行,往往在同一時間接收。這樣效率較高,但是意味著接受者不能使用結果或終止廣播數據傳播。

有序廣播(由Context.sendOrderedBroadcast發送)一次傳遞給一個接收者。由于每個接收者依次執行,因此它可以傳播到下一個接 收器,也可以完全終止傳播以便他不會傳遞給其他接收者。接收者的運行順序可由匹配的意圖過濾器(intent-filter)的 android:priority屬性控制。

廣播接收者不顯 示一個用戶界面。然而,它們啟動一個活動去響應收到的信息,或者他們可能使用NotificationManager去通知用戶。通知可以使用多種方式獲 得用戶的注意——閃爍的背光、振動設備、播放聲音等等。典型的是放在一個持久的圖標在狀態欄,用戶可以打開獲取信息。

2.4、內容提供者(Content providers)

內容提供者(content provider)使一個應用程序的指定數據集提供給其他應用程序。

這些數據可以存儲在文件系統中、在一個SQLite數據庫、或以任何其他合理的方式。 內容提供者繼承自ContentProvider 基類并實現了一個標準的方法集,使得其他應用程序可以檢索和存儲數據。然而,應用程序并不直接調用這些方法。相反,替代的是它們使用一個 ContentResolver對象并調用它的方法。ContentResolver能與任何內容提供者通信,它與提供者合作來管理參與進來的進程間的通信。

內容提供者是Android 應用程序的主要組成部分之一,提供內容給應用程序。他們封裝數據且通過單個ContentResolver接口提供給應用程序。只有需要在多個應用程序間 共享數據是才需要內容提供者。例如,通訊錄數據被多個應用程序使用,且必須存儲在一個內容提供者中。如果你不需要在多個應用程序間共享數據,你可以直接使 用SQLiteDataBase。

當ContentResolver發出一個請求時,系統檢查給定的URI的權限并傳遞請求給內容提供者注冊。內容提供者能理解URI想要的東西。UriMatcher 類用于幫組解析URIs。

需要實現的方法主要如下:

query(Uri, String[], String, String[], String)  返回數據給調用者

insert(Uri, ContentValues) 插入數據到內容提供者

update(Uri, ContentValues, String, String[]) 更新內容提供者已存在的數據

delete(Uri, String, String[]) 從內容提供者中刪除數據

getType(Uri) 返回內容提供者中的MIME 類型數據

更多的關于ContentResolver信息,請查看相關文檔。每當有一個應該由特定組件處理的請求,Android可以確保該組件的應用程序正在運行,如果沒有就啟動它,而且一個適當的組件實例可用,如果沒有就創建。

責任編輯:徐川 來源: eoeAndroid
相關推薦

2009-08-14 17:08:00

Android應用程序

2010-10-15 09:39:22

MeeGoQt

2011-05-31 13:34:22

應用開發iPad

2010-02-07 10:25:11

Android

2010-02-06 15:26:11

Android應用程序

2011-08-05 13:49:53

iPhone 應用 開發

2010-05-22 16:57:09

BlackBerry開

2013-01-11 15:06:13

iOS開發移動應用iPhone

2014-05-27 14:09:52

AndroidActivitysingleTask

2014-05-27 14:12:49

AndroidActivitysingleTask

2014-05-27 14:16:08

AndroidActivitysingleTask

2014-05-27 14:28:25

AndroidActivitysingleTask

2014-05-27 14:44:26

AndroidActivitysingleTask

2014-05-27 15:07:07

AndroidActivitysingleTask

2014-05-27 15:11:20

AndroidActivitysingleTask

2014-05-27 15:17:46

AndroidActivitysingleTask

2014-05-27 14:33:37

AndroidActivitysingleTask

2014-05-27 14:59:24

AndroidActivitysingleTask

2014-05-27 15:04:15

AndroidActivitysingleTask

2014-05-27 15:09:13

AndroidActivitysingleTask
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产一区二区三区在线视频 | 国产99热| 亚洲综合色网站 | 成人在线视频一区二区三区 | 国产精品99久久免费观看 | 亚洲精品一区二区冲田杏梨 | 日韩欧美国产精品 | 色网站视频 | 亚洲欧洲精品在线 | 国产精品a一区二区三区网址 | av天天干 | 亚洲精品免费观看 | 91精品国产一区二区三区蜜臀 | 91亚洲视频在线 | 欧美日韩电影免费观看 | 国产精品久久久久一区二区三区 | 欧美极品在线观看 | 国产福利91精品 | 在线免费看黄 | 成人av免费| 在线免费观看黄a | 亚洲精品乱码久久久久久黑人 | 日韩在线一区二区三区 | 日韩在线一区二区 | 亚洲国产成人精 | aaa大片免费观看 | 国内精品久久精品 | 欧美福利三区 | 久久久精品一区二区三区 | 免费看国产精品视频 | 国产一区二区在线视频 | 国产一区在线免费观看 | 国产一级片久久久 | 国产av毛片| 久久人人爽人人爽人人片av免费 | 宅女噜噜66国产精品观看免费 | 丝袜 亚洲 另类 欧美 综合 | 黄色在线观看网站 | 午夜精品一区二区三区在线视频 | 久久久久久久久久久久久久av | 国产一区91精品张津瑜 |