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