预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10
在线预览结束,喜欢就下载吧,查找使用更方便
如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
Java™语言是Android开发人员所选的工具。Android运行时使用自己的虚拟机Dalvik,这并不是多数程序开发人员使用的普通Java虚拟机。Dalvik支持Java编程语言的大部分功能——但并不是全部。eBay软件架构师HYPERLINK"http://www.ibm.com/developerworks/cn/xml/x-gourmetandroid/#author1"MichaelGalpin写了一篇文章《HYPERLINK"http://www.ibm.com/developerworks/xml/library/x-gourmetandroid/index.html"GourmetJavatechnologyforAndroidapplications》,通过本文,您将学习高级Java功能及其如何在Android中实现。这些功能包括并发性、联网和数据库访问。HYPERLINK"http://www.ibm.com/cn/zh/"IBMdeveloperWorks上发布了本文的HYPERLINK"http://www.ibm.com/developerworks/cn/xml/x-gourmetandroid/#f1"中文版,现转载于此。全文如下:
准备开始
本文介绍几种处理复杂情况的AndroidSDK工具。开发Android应用程序,需要最新版AndroidSDK,这需要一个JavaDevelopmentKit(JDK)。我使用的是Android2.2和JDK1.6.0_17。物理设备不是必须的;本文中的所有代码在SDK附带的Android模拟器上可以很好的运行。本文假设您对Android编程比较熟悉,故不涉及Android基础开发,但是如果您有Java编程语言的知识,也是可以的。
并发性和联网
Android应用程序一个最常见的任务就是检索数据或通过网络将数据发送到远程服务器。这一操作的结果通常是一些您想要展示给用户的新数据。这意味着您需要修改用户界面。大多数开发人员知道您将不会执行一个潜在的长期运行任务,例如,在主UI线程上通过网络访问数据(特别使用一个网络连接非常慢的手机)。冻结您的应用程序直至长期运行任务完成。事实上,如果这个任务超过5秒,Android操作系统将出现臭名昭著的ApplicationNotResponding对话框,如图1所示。
图1.Android臭名昭著的ApplicationNotResponding对话框
您不可能知道用户网络连接能有多慢。为了避免冒险,您必须在不同的线程上执行任务,或者至少不在主UI线程上执行。许多Android应用程序,但不是全部,需要处理多线程,由此引起并发。应用程序经常需要本地保存数据,Android数据库是一个很好的选择。这三个场景(不同线程,并发和本地保存数据)在Java环境中有许多标准方法可以用来处理。然而,正如您将要看到的,Android提供不同的选择。让我们逐个看看,看看其优点和缺点。
Android网络
通过网络使用Java编程进行调用是简单的,我们熟悉的java.net包含几个执行此操作的类。这些类大多数在Android中都可用,事实上,您可以使用像java.net.URL和java.net.URLConnection这样的类,就像您在其他Java应用程序中那样。然而,Android包括pacheHttpClient库,这是在Android上连接网络的首选方法。即使您使用常用Java类,Android实现仍然使用HttpClient。清单1显示了一个使用这个必不可少的库的示例。
清单1.在Android上使用HttpClient库
privateArrayList<Stock>fetchStockData(Stock[]oldStocks)
throwsClientProtocolException,IOException{
StringBuildersb=newStringBuilder();
for(Stockstock:oldStocks){
sb.append(stock.getSymbol());
sb.append('+');
}
sb.deleteCharAt(sb.length()-1);
StringurlStr=
"http://finance.yahoo.com/d/quotes.csv?f=sb2n&s="+
sb.toString();
HttpClientclient=newDefaultHttpClient();
HttpGetrequest=newHttpGet(urlStr.toString());
HttpResponseresponse=client.execute(requ