譯者 序
?
整個 2007 年的 9 月,我都把時間花在了撰寫《 從 Java EE 到 Java ME 的通訊 》這篇文章上。其實這并不是對 2 年前的項目進行整理并 post 出來而已,這完全不是主要目的!!!
看官們完全沒有理解我的用意,我得到的全是“文章轉載”這樣的留言回復!那篇文章的感言我這樣寫的:“要實現遐想并解釋上面的問題有待于廣大開發者的共同努力,把自己的業余時間都投入在類似 db4oME 這樣的技術上,如果這樣的分布式數據庫能成功實現,我想這會給移動計算帶來一場革命,更多依托網絡、數據庫的手機應用程序將會誕生,發揮 Java 強大的優勢!”
我是 2007 年 11 月底得知 Android 的,正好對應了上面的感言!不知道國人是怎么想的,難道做手機應用程序沒有做手機游戲有前途,還是無話可說只能對我的感言嗤之以鼻?如果是這樣,那么看了本文之后也許會讓你如夢初覺 ……
為 手機 設備而生的 Android軟件開發集合包 已經 發布了一周 。作為 db4o對象數據庫 創始人的我來講,這是我們的產品和公司最值得興奮的事件之一。
Android 將把零散的手機開發平臺統一起來,而且它可以開發基于位置的應用程序來服務全世界的用戶。這就是為什么會掀起一場手機領域狂風的原因。
內容
(略,參考下面詳細標題。)
這場狂風的前景
從全球化觀點來看,手機操作系統是非常之零碎的。手機制造商和運營商這些關鍵角色,他們都有自己的一套私有技術。被認為是全球性的如 Symbian ,微軟和 Apple 都顯得較小了,他們每年分別為全球提供 60million 、 20million 以及計劃的 10million 部手機。
由于沒有標準的操作系統,運營商傾向于使寫出的應用程序能讓普通瀏覽器以 Ajax ( Javascript )方式運行。在手機上面運行 Ajax 是不方便的:
l???????? 小屏幕上的用戶體驗是很不好的。
l???????? 應用程序只能運行在連接互聯網的狀態下。
l???????? 沒有任何的本地化存儲、結構化數據緩存的方案。
l???????? 要開發出復雜交互的應用程序幾乎是不可能的,因為要受到傳輸延遲和帶寬的影響。
l???????? 設備的本地處理能力沒有發揮出來。
l???????? 可升級的服務器端應用程序是一種開發挑戰。
l???????? 開發 Ajax 應用程序是麻煩、昂貴和緩慢的。
l???????? 沒有標準的接口來訪問瀏覽器以外的本地設備服務,例如 GPS 、相機、聯系人、呼叫列表、麥克風或揚聲器。
設想今天你忽然有了靈感,這個靈感開發出來的應用程序可以超越現有應用程序( rosen jiang 注:也可稱作殺手級移動應用程序),而且也想把它部署到世界各地,你愿意選擇哪種技術?
如果你還不著急發布的話,你應該采用 Android 。下面是為什么 Android 能勝出的理由:
基于位置的服務
Google 擁有一套服務器基礎設施( server infrastructure )技術來提供基于位置的服務。
Adnroid SDK 提供了兩個非常有用的包: com.google.android.maps 以及 android.location 。你可以在 Google maps 上建立自己的覆蓋圖。如果你在某個位置的半徑之內, LocationManager 允許開發“ ProximityAlert ”這樣的方式來喚醒電話或觸發其它事件。
資金和廣告資源
Google 。
開源
Android 是免費的例如免費啤酒一樣,遵循 Apache License 開源協議。任何人都可以獲取 Android 組件并用自己的技術來調用。為什么有些公司還要花費數年并投資數百萬來重新發明輪子?如果他們復用了 Android 組件,這些花費都是不必要的!如果 Google 工程師們始終站在開發的前沿,那么那些私有的技術分支終將會統一到 Android 上來。
健壯的生態系統
伴隨著 Linux 、 Java 以及 Eclipse IDE , Google 已經選擇了開源生態系統中最強大的組合。
應用程序
Google 提供了 1千萬美元的開發者挑戰 獎勵來確保各種應用程序能盡快開發出來。
技術
為了修建“摩天大樓”,最先發布的 SDK 展示了一些最聰明的 Java 工程師已經有足夠的自主權和時間來實現從零開始的基礎部件搭建。
經壓縮改良后的字節碼格式運行在 Dalvik Java VM 上,在消耗很少資源并且應用程序之間不互相干擾的情況下 Dalvik Java VM 可以并行運行多個應用程序。這些特性在 Suns Java RFE 列表上早就有了, Google 只是簡單的構建它們。
而利用 Apache Harmony 類庫則是明智之舉。這樣 Google 就可以不受 Sun 的左右實現完整的開源 Java 。同時 Harmony 在很多方面都快得多。
從 SDK 第一天發布開始,就發現 Eclipse 集成能力是令人驚訝的。任何人可以在數分鐘之內利用 Eclipse 開發出第一個 Android 應用程序。
Eclipse 中的 DDMS 透視圖能控制和監控模擬器,這是我見過最好的模擬器管理控制臺了。而其他模擬器經過多年的發展才得以成熟,比如 Microsoft 或 Symbian 可能給你留下這樣的印象:模擬器不人性化,你不得不用多種不同的工具“連接”他們。而在 Eclipse 的 DDMS 透視圖中,你可以立即察覺到發生了什么,可以從內部進行控制。日志視圖不僅僅能輸出連續的文字,還可以自己追加過濾器,例如通過 process 、 severity 或自己的標簽。
你可以觀察所有的運行活動,他們的堆使用率以及線程在做什么。系統能為你計算每個線程的消耗時間,非常棒。
指南能告訴你為什么控制設備上應用程序的效率是非常重要的:效率意味著更長的電池壽命,更低的電池重量和更少的設備花費。
多數應用程序框架的理念對我來說看上去都不錯。下面是一些關鍵部分:
l???????? 行為—應用程序的屏幕
l???????? 意圖—請求的動作
l???????? 意圖接收者—與請求相關的應用程序代碼
l???????? 服務—可共享但不可視的應用程序組件
數據庫支持
“內容提供者”需要類似數據庫的功能。對于我們來說這非常有趣,來看看 API :
public abstract Cursor query(
??? ContentURI uri,
??? String[] projection,
??? String selection,
??? String[] selectionArgs,
??? String groupBy,
??? String having,
??? String sortOrder)
insert(ContentURI uri, ContentValues values)
update(
??? ContentValues values,
??? String[] selectionArgs)
delete(ContentURI uri, String selection, String[] selectionArgs)
什么?
抱歉,這里不是 Java ,也不是面向對象的,甚至連 SQL 都沒有。
我們將在以后的文章中同步比較 db4o 的相應接口,來展示優雅的對象持久化是怎樣的。如果你還不知道 db4o ,這里有 PDF版的指南 以及相應的 db4o下載資源 。
Android 數據庫 API 忽視了基于位置服務的關鍵元素:
從“下一個汽車租賃站在這里”或“我所有的朋友都在 1 英里 內”這樣描述中,你怎樣建立查詢?很明顯,一個標準的地理空間查詢必須成為數據庫 API 的一部分。
我的第一個 Android 應用程序
現在繼續寫我的第一個 Adnroid 應用程序 ……
要是沒有工具的支持的話,我是不喜歡用 XML 寫 GUI 界面。我確信基于 Eclipse 的可視化編輯器已經很好用了。為 GUI 開發設計的小部件集看起來像釘子在墻上羅列可視化的東西一樣而不是用到的時候才釋放。 Apple 在它的 iPhone 中也為提高用戶體驗設置了條狀欄。也許 Google 希望社區創造更好的界面,“重新思考傳統用戶界面”的觀點已經出現在 開發者挑戰網站 的開發愿景章節了。
作為我第一個 Angroid 應用程序的部分,我直接把對象存儲在 db4o 中,隨后我感到愉悅而驚訝。為 JDK 1.1 開發的 db4o 完全可以在上面運行。
讓我們看看為什么用了為 JDK 1.2 開發的 db4o 就要出問題。喔,調試 Eclipse 里面的模擬器是很好很快的。一會兒工夫就可以把應用程序部署到模擬器進行單步調試代碼了,就像以前用其他模擬器查看一樣。很好!
為什么錯了?很明顯, java.nio.channels.FileLock#release() 拋出一個 IoException ,此外再也沒有更多信息了。看起來我遇到了第一個 Android bug 。
當我從代碼中刪除了令人不快的 #release() 這行之后,我們的 JDK1.2 版本在我的小測試中完美的運行起來了。現在讓我們把持久對象的字段變成私有的,看是否 AccessibleObject#setAccessible() 允許訪問私有字段。好極了!這么重要的測試已經通過了,我們有了完整的未刪減功能的 db4o 運行在這個系統上,且 Java 方言足夠支持我們的一切操作。
Android ,讓我們成為朋友!
總結一下,對于我來說基本構建部分看起來非常的健壯,也非常穩定和出色。 GUI 以及數據庫支持還未達到國際水平,但是都可以通過 和我們一樣 的第三方進行改進。
最后再寫點什么吧:
殺手級移動應用程序
如果我沒有在 db4o 工作,我將立即嘗試如何開始構建基于位置的應用程序,和我夢想中的一樣:
駕乘分享
沒有必要一人一車。我們可以做的更好,而不是花費醒著的 1/10 時間在堵車上。這樣也可以更好的保護環境。
一個基于位置的系統能發現兩個人在同一時間總是走同樣的路線,那么這樣就可以把他們組織在一個車里。
有了大量安裝這套系統的基礎,從 A 地到 Z 地你甚至可以不需要自己的車。你只需要在手機中輸入你的計劃路線,接著系統會找到某人和你走同樣的路線,實時的換車也是該服務的一部份。
類似煙霧污染法可以保護我們的環境一樣,它也可以強制把駕乘分享系統安裝在車上(僅僅是安裝,不能強迫大家都來使用)。其實這樣做最大的好處是通過節約石油來促進經濟,同時也可以減少巨大的尾氣排放。或許政府能付錢購買這套系統?
如果安全是被考慮的因素:
可以利用 Ebay 來顯示評價(“好司機”、“不抽煙”、“講好聽的徒步旅行故事”),讓人們在接觸陌生人的時候有個客觀印象。女性可以和女性結伴同行。
今天已經有了些基于互聯網的駕乘分享系統,但是要應付大量的評論,系統必須是實時的,自動且非常的易用。想象一下你的電話用語音告訴你:
“停在下一個商場的右邊,你的鄰居 Sue 想乘車去 Santa Monica 。她為這次乘車提供一杯冰咖啡作為感謝,并愿意告訴你上周不在家的時候你的孩子在干什么。”
任何地方都能開會
你每天都會錯過見到老朋友的機會,而且就差半英里或一兩分鐘的路程。如果事先能得到通知并一起喝咖啡不更好么?基于位置的移動系統能為你安排這一切。
試想你在國外的城市,而且沒人陪你吃晚餐。為何不詢問你的手機誰有空呢?也許在這個城市中有你十年未見的老同學,而且他還經營者這個城市中最好餐館。去見見他吧!
你兩周前就已經安排好和在紐約某人的會議時間,并即將飛往那個城市。但你現在卻在費城參加另外一個會議,而且和紐約某人的會議時間正好重合。在這樣繁忙的一天中,你怎樣抓住機會來拯救自己?
放眼全世界!
標準的手機操作系統能讓上面的兩個應用程序非常容易實現。不僅在美國,而是在全世界都如此!
僅僅是為手機?
在理念上,看起來 Android 是專門為手機而生,但并不是其他應用和設備不能使用這樣一種開放和免費的軟件集合包。
可以預見, Android 集合包能取悅設備制造商,因為在相同的開發時間下 Java 比 C 的編碼速度更快。
Web 3.0
早在 Android 發布之前,一份商業展望報告就很直接的指出:
Web 3.0 將會是基于位置的,并且 Google 將會是主角。
現在我們知道他們( rosen jiang 注: Google )是如何做的了。
惹 Steve Ballmer生氣的原因,不因為Android只是一份沒有活力的新聞稿。
它已經在工程上成功的運行起來了,為未來打下了良好的根基。
棒極了!太漂亮了!
祝賀所以的 Google 工程師讓這一切成為現實。
謝謝你們!
Android 將會改變世界!
本站點相關內容
Android引領手機走向新高度—推開門下一英里就是db4o
Db4A—Android數據庫
Adnroid密碼管理范例應用程序
對于 Adnroid開發者挑戰的想法 請注意!引用、轉貼本文應注明原譯者:RosenJiang 以及出處: http://www.tkk7.com/rosen
Powered by: BlogJava Copyright © Rosen