Study on Android【一】–概述

來源:互聯網
上載者:User

如果你還不知道google的重磅炸彈Android(中文意思是機器人...感覺google取名字的天賦全部花在google這個詞上了...)是什麼,你可以看一下這裡。如果你覺得挺沒有意思,再看一下這裡。如果還覺得不好玩,那下面的東西就不需要看了。。。

對我來說,Android還是很有吸引力的,不然一個MS技術的忠實走狗也不至於一下就投入java的懷抱。至於為什嗎?恩,等我有八卦精神的時候再使勁的侃。

在這裡還是談正事的要緊。這幾天看了下Android SDK,編了幾個練習,獲得了一點點經驗。簡單的羅列一下,比較重要的內容都添上連結,也是方便我和所有需要的人查看。

 

按google的說法Android包括一個作業系統,一些中介軟體和核心應用程式。作業系統是基於Linux的,上面的東西用了些開源的、google也花了不少精力開發了其他一些東東。底層用的是C++,但所有供應用程式開發的API都是java的(偽託管作業系統?^_^)。具體內容可以看一下這裡 。基本上不會與你閉著眼睛幻想的有太大區別。

Android的GUI架構,你可以從你本身的編程經驗中看到很多的影子(對我而言主要是.net winform && asp.net,但感覺上很多理念與WPF類似,只是我對WPF只是走馬觀花的瞭解了一些*_*,談不上有任何經驗...)。

首先,在Android中,每一個需要顯示並啟動並執行程式都需要有一個Activity 類的衍生類別,從某個程度上來說它有點類似於Page的概念。每一個Activity從直觀上來看就是一螢幕的內容,當你切換了螢幕,基本上就意味著你切換了一個Activity。Activity負責管理介面上的各個顯示控制項,最重要的,是它提供了基本的生命週期管理的函數,包括OnCreate, OnResume, OnFreeze, OnPause等等。從名字上,就可以大致看出這些函數所負責的內容,但你一定要明白他們具體分工的區別,具體情況查看一下這裡 。但與Page不同的是,當一個Activity被切換出去的時候(你隨時可能在你未完成所需事情的時候離開一個Activity,因為你用的是手機,你要隨時準備接電話,準備迎接GF,準備與悄悄從後面摸過來的老闆據理力爭),你會希望回來還看到一樣的內容。因此,你對Activity的生命管理尤其的重要(特別是當你瞭解了Android的進程管理的時候...),你可能需要在各個周期點上負責保管狀態、恢複狀態、傳送資料等工作。

當你從一個介面切換到另一個介面的時候,就涉及到了Activity的切換。當你做這個工作的時候,你需要用到Intent,它包含切換所需的動作、(動作)分類、傳送資料等資訊。這個類的工作雖然簡單,但內容豐富,建議仔細看看SDK,因為開發中你會反覆與它打交道,而且可能你需要在兩個Activity切換時做很多事情,比如傳資料、做一些限定,都需要你對Intent比較熟悉。在配置文檔中,你可以使用IntentFilter 對Intent進行過濾和匹配。在一個進程中,系統會維護一個Activity記錄棧,以更好的維護Activity之間的互動。

在切換過程中(和其它一些場合),你需要傳送資料。在Android中,你需要使用到一個Bundle 的類來傳輸。Bundle是其實一個key/value的map,不過它提供了很多API,用起來會比較方便。用這種統一格式來傳輸資料,在所需資料一定時會使判定比較簡單,不需要太在乎是誰什麼時候進行的傳輸。

每一個Activity還需要負責載入這個Activity所需要的顯示的內容。顯示的每一個部分稱作一個view(你可以對應到control上),每一個都會處理鍵盤等互動事件、完成相應功能,並進行繪製。view的組織基本可以看成是一個複合模式,每一個view還會有相應的style,具體可以看這裡。通過派生不同的view類,你可以定製你所需要的特定view(自訂控制項...),它可以是簡單的多view的特定布局組合,也可以是完成某種特殊功能。一般你會需要重載onDraw和onMeasure,具體可以看這裡,規則還是有點小繁瑣的。

但view的構造、layout的設定、樣式的設定等等工作,通常不會使用顯性的java代碼進行編製,而是通過XML進行配置(WPF!!)。所有的資源也都是通過這種方式進行提供(查看這裡)。而XML設定檔與代碼的聯絡,是通過R類來進行的。R類是動態構造,它裡面有一對的內嵌類,內嵌類裡有一堆的靜態int ID值。它是有系統自動根據配置文檔的增刪進行維護(in Eclipse...),完成從名字到ID的轉換工作。而所有接受這種ID值的API,都會負責根據XML進行資源的配置。

Android的進程管理和資源管理都很有意思。通常,每一個應用程式(入口會是一個Activity的onCreate),都會佔據一個進程。但這個進程是託管的!!你無法確定它何時會被回收,當系統進程空間緊張的時候,會依照優先順序自動進行進程的回收(查看這裡 )。由此可以看到,維護一個Activity的生命週期是多麼的重要,因為它隨時會被系統幹掉*_*。同時,每一個應用程式的資料都是獨享的。就是你存在資料庫、檔案的資料別的程式無法訪問(其實根本是無法獲知)。要在應用間共用資料,比較好的一個策略是把自己做成contentProvider,其他應用可以通過提交特定格式URL申請你的資料×—×(Why URL?...)。

除了Activity,還有就是server。顧名思義,這就是幕後英雄的角色。他們不在螢幕上佔據任何位置,只是在後台默默工作。與他們互動的方法比較傳統,主要是監聽一些事件。當然很多時候這需要許可權,因此你需要瞭解一些具體內容。

每一個應用都會有一個Manifest.xml,提供全域的配置。包括設定許可權,設定各個Activity的屬性等等。維護這個設定檔是一項基本任務(當你添加了新的Activity的時候),因為好像外掛程式不會幫你完成這件比較瑣碎的事情。

 

本來還看了其他更多的內容。寫累了,不寫了。其他等有了更多經驗再慢慢寫吧。如果想學個入門的話,還是建議好好看SDK。Doc基本上是把你看成一無所知(實際上,我就是這樣*_*),而源碼裡也是包含海量的注釋(只是時不時就有幾個詞打錯...),連我如此弱的人都感覺看得不錯,可想而知這SDK做的還是非常好的。。。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.