解决Android httpclient网络post/get请求性能优化

原创 2013年12月03日 11:04:06

背景介绍

  这是一个webapp和nativeapp相结合的项目,webapp负责ui和业务逻辑,包含网络请求、数据存储、手机信息获取、app统计分析、webapp和整体app升级控制,nativeapp负责给webapp提供网络请求(跨域访问),app统计分析(集成countly sdk)调用,升级资源的下载和解压安装;

  其实这不是一个很好的架构设计,例如:app的一级菜单都是webapp,你想用户每次点击菜单都会发起网络请求,所以一想项目中webapp跟nativeapp的层次关系就知道会出很多问题;


问题来了

  测试人员说webapp登录有时候长达3-5秒,偶尔发生没有规律,也是无法忍受的;因为在wifi环境下都如此,要是用户在2G网路下,问题会放大的。


插曲

  webapp开发人员开始说server端登录耗时长,在排除了server问题之后,开始说android网络通信有问题,嗯,本人不太像bs前端工程师,可以理解,毕竟前端工程师从来就没有考虑过手机系统优化问题,所有出现类似的请求也在意料之中。


问题寻找

  android工程师,看了自己的网络代理代码,如下:

public class HttpClientFactory {
	 private static DefaultHttpClient client;

	    public synchronized static DefaultHttpClient getThreadSafeClient() {
	  
	        if (client != null)
	            return client;
	         
	        client = new DefaultHttpClient();
	        
	        ClientConnectionManager mgr = client.getConnectionManager();
	        
	        HttpParams params = client.getParams();
	        
	        
	        
			
			HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
			// 请求超时 
			HttpConnectionParams.setSoTimeout(params, 15000);
			HttpConnectionParams.setTcpNoDelay(params, true);//nagle算法默认是打开的,会引起delay的问题;所以要手工关掉。
			HttpConnectionParams.setConnectionTimeout(params, 15000);
	        
	        
	        client = new DefaultHttpClient(
	        new ThreadSafeClientConnManager(params,
	            mgr.getSchemeRegistry()), params);
	  
	        return client;
	    } 
}
连nagle算法都关闭了,哎,其实这个nagle算法关不关闭都不会影响的。随后也检查了,每次的网络请求都是线程控制的,甚至他都把其它不重要的网络请求线程的优先级设置成Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND) 都没效果。


android工程师,又重新写了一个访问server的app,顺序执行100次,均很正常;这说明了webapp的业务逻辑调用出问题了。


最后发现:

   webapp在webview加载完自己的登录页面就开始调用countly统计分析的初始化,结果造成了countly数据发送和webapp登录请求并发,自然就会出现有时候耗时长的问题;

虽然这篇的文章标题和内容不太相符,但是我想提醒大家,做app一定合理安排好业务逻辑,充分适当地用好网络请求这种宝贵而影响用户体验的资源。


随后对于webapp的业务优化开展:

   1、 全部的网络请求放在登录成功后延时10秒执行。

    2、countly监控数据汇报和app升级下载放在,activity onstop 里执行。

   3、合并多个并发网络请求为一次网络请求,减少并发。



相关文章推荐

TCP通信转HTTP桥接器(转发zabbix数据为例)

以zabbix通信转发为例,说明通过HTTP协议转发TCP请求的过程以及相应程序的设计实现与最终效果。...
  • tzdwsy
  • tzdwsy
  • 2016年05月30日 20:07
  • 1470

如何设置android HttpPost 连接服务器超时

package com.duoqiancaifu.oa.net; import java.io.IOException; import org.apache.http.HttpEntity...
  • zjy_hll
  • zjy_hll
  • 2014年10月15日 11:13
  • 693

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

android HttoPost 请求服务器超时设置

new Thread(new Runnable() { @Override public void run() { HttpClient httpClien...

Android网络优化4--写一个网络请求模板

我们在开发的时候,基本都需要写一些网络请求的模块。 下面是一个模板代码,可以直接复制过去使用。流程介绍:我们申请一个线程池,便于控制网络请求。 把网络的请求的具体内容写到Runnable中去,然后传...
  • f112122
  • f112122
  • 2015年11月14日 21:28
  • 601

Android·HTTP超时机制

由于手机端应用的响应,与当时的无线通信网络状况有很大的关联。而通信网络往往具有不稳定,延迟长的特点。所以,在我们的应用程序中,当我们请求网络的时候,超时机制的应用就显得特别重要。 超时机制主要有: ...
  • jdsjlzx
  • jdsjlzx
  • 2011年11月15日 17:58
  • 7980

Android网络编程之Http请求服务器数据(GET方式)

进行Android应用开发,其中不得不使用到网络编程,最基本的就是向服务器发送Http请求,并接收从服务器返回的数据,该类数据一般为JSON或XML格式。         向服务器进行请求数据一...
  • errvv
  • errvv
  • 2016年01月28日 16:41
  • 484

实现ViewPager新手引导页的指示点跟随移动的效果

效果图如下所示: ViewPager的滑动实现这个相信大家已经非常熟悉了,这里就不多说了,这里主要是将指示点的跟随移动的效果要如何实现. 由上图可知,会动的指示点只有一个,也就是那个红点.关于如何...
  • mChenys
  • mChenys
  • 2016年01月02日 20:41
  • 1359

一个简单的HTTP并发测试程序

#include #include #include #include #include #include #define MAX_THREAD 500 static unsigned...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:解决Android httpclient网络post/get请求性能优化
举报原因:
原因补充:

(最多只允许输入30个字)