編輯:關於Android編程
作為一個有半年余Android Developing折騰經驗的Android Developer(為什麼不說“開發經驗”呢?因為我仔細想了想,我還沒有獨立地做出一個完善美觀且有使用價值的應用。),要系統地學習安卓平台的基本開發技能,那麼第一步,了解並熟識Android的基本世界觀,應該就是十分必要的了。以前這方面的知識體系不成系統,比較破碎零散,故借此文稍作整理。
我認為在進入任何一個比較復雜的知識技能體系之前,都需要先用基本世界觀來熱熱身。對於高中物理而言,初中數學物理知識就形成了基本世界觀;對於近體詩寫作而言,平水韻和對仗的修辭手法就是基本世界觀;而對於Android,基本世界觀則包括了Android系統的簡介、四大組件的含義、以及其他一些基本的開發邏輯。
Android(Android System),是一個基於Linux內核的開源移動操作系統,由Google旗下的Open Handset Alliance(OHA,開放手持設備聯盟)持續領導與開發,主要設計用於觸屏移動設備,如智能手機和平板電腦等。Android 1.0 beta於2007年11月5日問世,至於世界上第一部真正意義上使用Android操作系統的設備,則是2008年10月22日發布的HTC Dream。Android系統采用Linux宏內核,系統核心語言是C和C++,主要的編程開發語言是Java。截止2016年初,Android的最新版本是Android 6.0“Marshmallow”(棉花糖)。
Android系統執行於Linux kernel之上,但並不是GNU/Linux。實際上,Android大都並不支持GNU/Linux的一些功能。除了基於Linux的核心之外,則是中介層、數據庫元和用C/C++編寫的API以及應用程序框架。Android的系統架構如下圖所示——
可見,系統架構大致分為四層:Linux內核層,核心庫層(以及運行環境),應用框架層和應用層。<喎?/kf/ware/vc/" target="_blank" class="keylink">vc3Ryb25nPjwvcD4NCjxwPjxzdHJvbmc+TGludXjE2rrLsuM8L3N0cm9uZz6xyL3Ptdey46Oszaizo9Kyyse21ERldmVsb3BlctL+sti1xKGjPC9wPg0KPHA+PHN0cm9uZz5BbmRyb2lkIFJ1bnRpbWXT60xpYnJhcmllc7LjPC9zdHJvbmc+OjxiciAvPg0KQW5kcm9pZLXE06bTw7PM0PLNqLOj0tQ8c3Ryb25nPkphdmE8L3N0cm9uZz7Oqrv5tKGx4NC0o6zUy9DQs8zQ8sqxo6zTptPDs8zQ8rXEtPrC67vhsbu8tMqx16qx5M6qRGFsdmlrIGRleC1jb2Rlo6hEYWx2aWsgRXhlY3V0YWJsZaOpo6zIu7rzQW5kcm9pZLLZ1/fPtc2zzai5/cq508O8tMqxseDS67XEPHN0cm9uZz5EYWx2aWvQ6cTiu/o8L3N0cm9uZz7AtL2rxuTUy9DQoaPSsr7NysfLtaOsPHN0cm9uZz5BbmRyb2lk06bTw7PM0PLKx9TL0NDU2kRhbHZpa9DpxOK7+sDvw+a1xDwvc3Ryb25nPqOssqLH0sO/0ru49tOm08OzzNDyttTTptPQ0ru49rWltsC1xERhbHZpa9DpxOK7+sq1wP2jqNXi0rKxo9akwcvI57n70ru49kFuZHJvaWTTptPDs8zQ8r34s8zS4s3i1tDWuaOsvauyu7vh07DP7LW9xuTL/NOm08OzzNDyvfizzLXE1f2zo9TL0NCho6OpoaNEYWx2aWsgVmlydHVhbCBNYWNoaW5l1NrEs9bWvce2yMnPutzP8crHSlZNo6jWwcnZztK40L71yOe0y6Opo6y1q8q1vMrJz8v8w8e7ucrH09Cyu9ChtcSy7tLstcShozxzdHJvbmc+SlZNyse20dW7u/rG96Oou/nT2lN0YWNro6mjrLWrRGFsdmlrIFZNyse8xLTmxve83Lm5tcS7+sb3oaNKVk3WtNDQY2xhc3O48cq9zsS8/qOstvhEYWx2aWsgVk3WtNDQZGV4uPHKvc7EvP6hozwvc3Ryb25nPiBEYWx2aWsgVk274c2ouf3WtNDQZGV4wuvOxLz+wLTN6rPJttHVu7ncwO2hos/fs8y53MDtoaKwssir0uyzo7ncwO2hosCsu/i72MrVtcjW2NKquabE3KOs1eLQqdKyus1KVk263M/xoaM8YnIgLz4NCkFuZHJvaWTPtc2zu7m74c2ouf3Su9CpQy9DKyu/4sC01qez1s7Sw8fKudPDtcS497j21+m8/qOosPzAqE9wZW5HTKOsU1FMaXRlo6xXZWJLaXS1yNK7tPO20cnxxua1xNL9x+a6zb/io6mjrNXi0Km5psTczai5/dOm08OzzNDyv/K83Mzhuam4+L+qt6LV36Os1eK+zcrHPHN0cm9uZz5MaWJyYXJpZXOy4zwvc3Ryb25nPqGjPC9wPg0KPHA+PHN0cm9uZz5BcHBsaWNhdGlvbiBGcmFtZXdvcmujqNOm08O/8rzco6my46O6PC9zdHJvbmc+INOm08O/8rzcsuO1xNLi0uXU2tPao6xBbmRyb2lkzOG5qbj4v6q3otXf0ru49r/yvNy/qreixr3MqKOsv6q3otXf1NrX8dGtv/K83NSt1PK6zcLfvK21xLv5tKHJz6OsttS/8rzcvfjQ0MCp1bm007b4v6q3orP2uPfKvbj30fm1xGFwcNOm08Oho7+qt6LKsdKyysfNqLn91eLSu7Lj0+u117LjvfjQ0L27u6WjrLKiubm9qLj8yc/Su7y2tcTTptPDsuOho9Xi0ruy47D8wKjBy7j3yr2499H5tcTPtc2zQVBJo6zNrMqx0rK/ydLU06bTw0pOSbXIvLzK9aGj06bTw7/yvNyw/MCowctBY3Rpdml0eSBNYW5hZ2Vyo6xXaW5kb3cgTWFuYWdlcqOsQ29udGVudCBQcm92aWRlcqOsVmlldyBTeXN0ZW21yNbY0qrX6bPJsr+31qOsv8nS1MDtveLOqr+qt6LV37XE0ru49rmkvt/P5KGjPC9wPg0KPHA+PHN0cm9uZz7TptPDsuM8L3N0cm9uZz6jutXi0ruy477NysfX7s6q0M7P86Osus3Tw7un1rG9073TtKW1xLLjtM7By6OssPzAqLXnu7CjrLbM0MWjrNPKvP66zbj3yr2499H5tcTKtdPDQVBQoaLTzs+3tcihozwvcD4NCjxoMyBpZD0="其他特征">其他特征
開發完成後,Android SDK 工具將代碼以及所有數據和資源文件一起編譯到一個APK: Android 軟件包,即 .apk 格式的存檔文件中。一個 APK 文件包含 Android 應用的所有內容。 默認情況下,每個應用都在自己的 Linux 進程內運行。Android 會在需要執行任何應用組件時啟動該進程,然後在不再需要該進程或系統必須為其他應用恢復內存時關閉該進程。 默認情況下,每個應用都只能訪問執行其工作所需的組件,而不能訪問其他組件。 在這樣的安全環境中,應用無法訪問系統中其未獲得權限的部分,但仍然可以通過一些特定的途徑與其他應用共享數據以及訪問系統服務。 應用可以請求訪問設備數據(如用戶的聯系人、短信、可裝入存儲裝置 [SD 卡]、相機、藍牙等)的權限。所有應用權限都必須由用戶在安裝時授予。這也就是安裝時會列出的“需要的權限”信息。
活動一般就是一個單獨的用戶界面的屏幕。例如,一個電子郵件應用中可能具有一個顯示新郵件列表的 Activity、一個用於撰寫新郵件的 Activity 以及一個用於閱讀郵件具體內容的 Activity。應用中的多個活動通過協作和聚合的方式形成一種有機的整體,完善用戶體驗,但每個活動都是獨立於其他活動而存在的。在這個邏輯上而言,其他某個應用將可以啟動電子郵件應用中的某一個活動,比如在相機應用在拍照後啟動撰寫新郵件的活動。 一個應用通常由多個彼此松散聯系的 Activity 組成。 一般會指定應用中的某個 Activity 為“主” Activity,即首次啟動應用時呈現給用戶的那個 Activity。Activity之間通過Intent組件進行通信。在開發時,每一個Activity都必須要在AndroidManifest.xml配置文件(即清單文件)中聲明,否則將無法識別也不執行該Activity。 關於Activity的生命周期:Activity 基本上以三種狀態存在,已繼續(運行中)、已暫停和已停止。關於活動的七種方法和生命周期詳解,可見下圖: Activity的基本方法: 這些方法共同定義 Activity 的整個生命周期——可以通過實現這些方法監控 Activity 生命周期中的三個嵌套循環: 服務是一種在後台運行的組件,用於執行長時間運行的操作或為遠程進程執行作業。服務不提供用戶界面。服務不影響其他活動與用戶的交互,如用戶在浏覽器中閱讀網頁時,另外一個程序的服務可以在後台播放歌曲。活動等其他組件可以啟動服務,讓其運行或與其綁定以便與其進行交互。 服務有兩種,啟動和綁定: 需要注意的是,服務也可以以兩種方式同時存在——問題的關鍵在於回調方法的具體實現。另外,和Activity一樣,在程序清單中需要聲明所有服務。 服務的生命周期較為簡單: 內容提供者管理一組可以共享的應用數據,也叫內容提供程序。其他應用可以通過內容提供程序查詢,甚至修改數據(如果內容提供程序允許)。 例如,Android 系統可提供管理用戶聯系人信息的內容提供程序。另外,內容提供程序也適用於讀取和寫入不共享的私有數據。它的好處是統一了數據訪問方式。Content Provider的主要用法是借助ContentResolver對象用作客戶端來與提供程序通信。 內容 URI 是用於在提供程序中標識數據的 URI。內容 URI 包括整個提供程序的符號名稱(其權限)和一個指向表的名稱(路徑)。這裡的URI以content://作為前綴,表示該數據由ContentProvider來管理。 廣播接收器是一種用於響應系統范圍廣播通知的組件。 許多廣播都是由系統發起的—例如電池電量不足。應用也可以發起廣播,如通知其他應用某些數據已下載至設備且可供給使用。應用可以使用它對外部事件進行過濾,只對感興趣的外部事件通知(如當電話呼入時,或者WIFI網絡可用時)進行接收並做出響應。 廣播接收器不會顯示用戶界面,但它們可以創建狀態欄通知,在發生廣播事件時提醒用戶。Broadcast receiver的注冊有兩種方法,分別是程序動態注冊和在AndroidManifest清單文件中進行靜態注冊。這個組件可以看做是一種程序間通信的“橋梁”。 按照官方文檔自誇的說法,Android系統設計的獨特之處在於,任何應用都可以啟動其他應用的組件。例如,如果想讓用戶使用設備的相機拍攝照片,很可能有另一個應用已經可以執行該操作,那麼這個應用就可以利用另外一個應用,而不是開發一個 Activity來自行拍攝照片。 當系統啟動某個組件時,會啟動該應用的進程(如果尚未運行),並實例化該組件所需的類。四種組件類型中的三種—Activity、服務和廣播接收器—通過名為Intent的異步消息進行啟動。Intent會在運行時將各個組件相互綁定(可以將 Intent視為請求操作的信使)。 在 Android 系統啟動應用組件之前,系統必須通過讀取應用的AndroidManifest.xml文件(“清單”文件)確認組件存在。應用必須在此文件中聲明其所有組件,該文件必須位於應用項目目錄的根目錄中。AndroidManifest文件中未進行聲明的活動、服務以及內容提供者將不為系統所見,從而也就不可用。 當然,清單文件還有別的重要作用,如: Android應用顯然並非只有代碼—它還需要與源代碼分離的資源,如圖像、音頻文件以及任何與應用的具體呈現有關的內容。對於每一項資源,SDK 構建工具都會定義一個唯一的整型 ID,利用它可以引用應用代碼或 XML 中定義的其他資源中的資源。各種資源理應放入項目 res/ 目錄的特定子目錄之下,常見的目錄有drawable, layout, mipmap, values等。 要入門Android開發,我個人認為需要做好的准備如下: 以上就是成為一個Android Developer所需的簡單准備條件,Android Developing本身是個復雜的體系,學習起來有不小的難度,需要耗費很多時間與精力,但是開發本身無論如何都是一件快樂而充滿成就感的事情。Android四大組件
Activities
public class ExampleActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// The activity is being created.
}
@Override
protected void onStart() {
super.onStart();
// The activity is about to become visible.
}
@Override
protected void onResume() {
super.onResume();
// The activity has become visible (it is now "resumed").
}
@Override
protected void onPause() {
super.onPause();
// Another activity is taking focus (this activity is about to be "paused").
}
@Override
protected void onStop() {
super.onStop();
// The activity is no longer visible (it is now "stopped")
}
@Override
protected void onDestroy() {
super.onDestroy();
// The activity is about to be destroyed.
}
}
Services
Content providers
Broadcast receivers
有關組件的其他
清單文件
應用資源
如何入門Android開發
在Android開發中,大部分控件都有visibility這個屬性,其屬性有3個分別為“visible ”、“invisible”、“gone”。主要用來設置控制控件的顯
Android 開發工具升級到22.6.2在創建工程時只要選擇的最低版本低於4.0,就會自動生成一個項目appcompat_v7,沒創建一個新的項目都會自動創建,很是煩惱
前言為什麼使用MVP,網上有很多說法,最主要就是減輕了Activity的責任,相比於MVC中的Activity承擔的責任太多,因此有必要講講MVP。MVP入門在MVC框架
自Android 4.4起,Android中的WebView開始基於Chromium( 這大概是因為Android部門負責人從Andy Rubin變成了Chrome部門的