Android与Server的交互方式

Android客户端与服务器交互方式,基于两种通信协议,四类通信方式,如下图:


【Socket与HTTP两种连接协议的区别】

1.HTTP连接使用的是”请求—响应”的方式,不仅在请求时需要先建立连接,而且需要客户端向服务器发出请求后,服务器端才能回复数据。

2.socket是可以监听,因此Socket连接一旦建立,通信双方即可开始相互发送数据内容,直到双方连接断开。保持客户端与服务器数据的实时与同步。

【四种连接方式的区别】

1.Socket,Android端SDK原生支持,服务器端无论是Java还是.NET都有接口,需要注意的地方与普通基于Socket网络编程的一样。

2.Http/HttpClient, Android端SDK原生支持,服务器端也无其它要求,ASP,JSP,PHP都能够处理,典型的框架如SSH-JSON。Java技术的服务器主要使用HttpServlet,.net技术的服务器对应HttpHandle,但处理起来没有那么Java那么直观。Http/HttpClient可采用的数据格式协议可以是简单的String类型,也可以是JSON或XML。

3.xml rpc是使用http协议做为传输协议的rpc机制,使用xml文本的方式传输命令和数据。Android本身并不支持XML-RPC协议, 需要下载相关工具, http://code.google.com/p/android-xmlrpc/downloads/list 服务器端可参考此文章,http://www.ibm.com/developerworks/cn/webservices/ws-xml-rpc/

4.WebService,Android本身也不支持基于SOAP的WebService,需要下载相关工具http://code.google.com/p/ksoap2-android/,服务器端支持的应该比较多,如基于.NET可以使用WCF,基于Java的Axis2,Apche CXF等。

5.restful,Android可以使用Http/HttpClient接口,Server使用ASP.NET Web API实现方式。

【使用场景】

跟据两种连接协议的特点来区分,如想做一个即时聊天程序,最好使用Socket,作一个发布类的应用可以使用基于HTTP协议的各种方式,像WordPress使用的XML_PRC.

GMS引起的待机时间短

近日尼日利亚客户反馈,手机在当地纯待机也只有45个小时,我们在实验室测试的待机电流约为10mA,1800mah的电池,理论时间应该在180小时左右,这差距也有点小大了。

从客户反馈的MTK Log中看到:

03-12 15:50:56.351 248 490 D PowerManagerService: acquireWakeLock flags=0x1 tag=DownloadManager

03-12 15:50:56.359 377 17849 V DownloadManager: initiating download for http://www.gstatic.com/android/keyboard/dictionarypack/metadata.json

03-12 15:50:56.359 377 17849 I DownloadManager: Initiating request for download 161369

03-12 15:50:56.359 377 17849 D libc-netbsd: getaddrinfo: www.gstatic.com return error = 0x8 >>

03-12 15:50:56.360 377 17849 D Proxy : prefProxy:DIRECT@

03-12 15:50:56.361 377 17849 W DownloadManager: Aborting request for download 161369: no network connection available

PowerManagerService
一直在持续的获取wakeLock,从Log上看no network connection available,没有网络为什么还在不停的尝试去下载呢。

Google了一下gstatic网站是干吗用的,发现也有人遇到类似的问题,大体上是讲用于获取输入法扩展包的一个地方。想到输入法扩展包,设置当中看到确实有这么一项。但查代码没有发现原生的AndroidInputMethode有此模块。后来突然想到是后来添加了GMS包,里面的LatinImeGoogle覆盖掉了原生的LatinIme,并且多了一个APK“LatinImeDictionaryPack”

删除此DictionaryPack问题得以解决,现在待机能有10~20个小时(还有差距,看来引起功耗大的问题不止一个)。

这应该是GMS包的一个Bug,在stackoverflow有人也问题了,4.0之后的GMS包应该解决了这个问题。