在網路連通和WebKit瀏覽器的前提下,你可能會問,在你能建立基於web的應用程式時,有沒有什麼理由是用來決定要建立本地的、基於Internet的替代版本。
建立胖的和瘦的用戶端應用程式而不依賴於整個基於web的解決方案有很多益處:
❑ 頻寬
在有限的並且昂貴的頻寬約束下,靜態資源片、layout和聲音等都是裝置上昂貴資料的消費者。通過建立一個本地的應用程式,你可以限制只用於資料更新的頻寬需求。
❑ 緩衝
移動網路儲存還沒有達到普遍存在的狀態。使用一個基於瀏覽器的解決方案,部分網路連通可能導致應用程式斷斷續續。本地的應用程式可以快取資料來提供儘可能多的功能而不需要一個即時的串連。
❑ 本地特徵
Android裝置不僅僅是一個運行瀏覽器的平台;它還包括定位的服務、網路攝影機硬體和重力加速度計。通過建立本地的應用程式,你可以將線上的資料和裝置上的硬體特徵結合起來,來提供更加豐富的使用者體驗。
現代的行動裝置提供了很多種訪問Internet的途徑。大概的看一下,Android提供了三種串連網路的技術。每一種都清晰地提供應用程式層。
❑ GPRS、EDGE、3G
通過提供移動資料計劃的服務商來訪問移動網路。
❑ Wi-Fi
Wi-Fi無線接收和行動熱點正在變得越來越常見。
串連Internet資源
本書並不覆蓋在特定web服務下工作的細節,但瞭解串連網路和從一個遠端資料源獲得資料流的一般原理還是有用的。
在你能訪問Internet資源之前,你需要在應用程式manifest中添加一個INTERNET的uses-permission節點,如下的XML片段所示:
<uses-permission android:name=”android.permission.INTERNET”/>
接下來的程式碼片段給出了開啟一個Internet資料流的基本樣式:
String myFeed = getString(R.string.my_feed);
try {
URL url = new URL(myFeed);
URLConnection connection = url.openConnection();
HttpURLConnection httpConnection = (HttpURLConnection)connection;
int responseCode = httpConnection.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_OK) {
InputStream in = httpConnection.getInputStream();
[ ... Process the input stream as required ... ]
}
}
catch (MalformedURLException e) { }
catch (IOException e) { }
Android包含了一些類,協助你處理網路通訊。它們放在java.net.*和android.net.*包中。
在本章的後面,將有一個完整的例子,顯示如何擷取和處理一個Internet種子來獲得過去24小時內能感受到得地震列表。
第9章中包含更多使用GTalk服務的基於Internet通訊的細節。第10章描述了更多關於管理特定的Internet串連的資訊,包括監視串連狀態和配置Wi-Fi存取點串連。
利用Internet資源
Android提供了很多種利用Internet資源的方式。
一個極端,你可以在Activity中使用包含一個基於WebKit的瀏覽器的WebView Widget。另一個極端,你可以使用用戶端的API,例如Google的GData API,來直接處理。介於兩者之間,你可以使用基於Java的XML解析工具(如SAX或javax)處理遠程XML種子來提取和訪問資料。
解析XML和對特定web服務處理的指令闡述並不在本書的範圍之內。那就是說,在本章後面的地震例子,給出了一個使用javax類來解析XML種子的完整的可工作的代碼。
如果你在你的程式中使用Internet資源,記住一點,使用者的資料連線依賴於他們能獲得的通訊技術。EDGE和GSM是出了名的低頻寬,而Wi-Fi串連在手機設定中可能是不可靠的。
通過限制傳輸資料的量來最佳化使用者體驗,並且確保你的應用程式足夠強壯來應付網路的掉線和頻寬節流設定。