解决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、合并多个并发网络请求为一次网络请求,减少并发。



Android的HTTP请求方式

大多数网络连接的Android应用程序都将使用HTTP发送和接收数据 对于Http协议的工作原理,一句话概括的话,就是客户端向服务器发出一条HTTP请求,服务器收到之后会返回一些数据给客户端,然后...
  • Checkiming
  • Checkiming
  • 2017年06月28日 00:16
  • 2109

Android 开发之异步网络请求(AsyncHttp开发)

我们在Android开发中,经常会用到Http进行请求数据.首先,在java中用的Http分为Httpclient和Httpconnection,在net中经常用ajax去请求数据,基本都是用了回调的...
  • Boom_Jia
  • Boom_Jia
  • 2016年07月22日 16:30
  • 278

Android安卓网络请求性能优化

1.服务器合理部署       不同区域,部署服务器。 2.服务端提供不同分辨率的图片  上传自己的手机分辨率,或者需要的尺寸,返回对应的图片。 3.合理的接口设计  合理的接口设计,减少不必要的,重...
  • icewst
  • icewst
  • 2016年12月14日 10:29
  • 816

网络请求全过程及其优化空间

一、网络请求全过程总览 从用户输入URL到网页呈现给用户都经过了哪些主要过程?主要有八大过程: 移动网络连接(移动端特有)DNS解析IP寻址TCP连接Request服务器处理Response页面渲...
  • chen093006
  • chen093006
  • 2017年01月12日 16:43
  • 422

Android·HTTP超时机制

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

Android 异步网络请求导致的程序崩溃

onSuccess, onFailure, onError等等。在这些方法里面我们一般会用Toast 或者 Dialog来向用户展示 例如:数据加载错误 这样的提示信息,当网速比较快的时候确实可以显示...
  • wangyingtong
  • wangyingtong
  • 2016年05月25日 18:06
  • 2538

Android Https请求详解

转至:http://itindex.net/detail/51666-android-https-demo    Android Https详细请求全方案实现,包括HttpUrlConnecti...
  • h183288132
  • h183288132
  • 2016年05月19日 14:17
  • 2295

Android Http请求失败解决方法

1、MainActivity.java 文件中的onCreate方法改成如下: @SuppressLint("NewApi") @Override protected void onCrea...
  • dasihg
  • dasihg
  • 2014年02月04日 23:05
  • 4387

Android http请求数据 设置超时

以前一直在写http请求,设置超时也没怎么认真测试过,今天项目不怎么忙,写了一个http请求测了一下发现以前设置的超时根本没起作用,原来是在发送请求之后设置的超时时间,说着比较迷糊,还是直接上代码。 ...
  • zhangxiweicaochen
  • zhangxiweicaochen
  • 2012年09月24日 13:27
  • 10444

Android网络编程之使用HttpClient进行Get方式通信

在Android开发中,Android SDK附带了Apache的HttpClient,它是一个完善的客户端。它提供了对HTTP协议的全面支持,可以使用HttpClient的对象来执行HTTP GET...
  • HanTangSongMing
  • HanTangSongMing
  • 2014年12月25日 09:15
  • 15120
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:解决Android httpclient网络post/get请求性能优化
举报原因:
原因补充:

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