解决Android httpclient网络post/get请求性能优化
来源:互联网 发布:课程的讲课软件 编辑:程序博客网 时间:2024/05/22 08:21
背景介绍:
这是一个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 httpclient网络post/get请求性能优化
- Android使用Httpclient网络请求,get,post方法
- HttpClient(GET、POST)请求网络数据
- android:HttpClient请求(get、post)
- httpClient post/get请求。
- HttpClient get,Post请求
- HttpClient get、post请求
- Android 网络请求方式之HttpClient,GET,POST,PUT请求使用方法
- Android 网络请求方式之HttpClient,GET,POST,PUT请求使用方法
- Android HttpClient get、post 访问网络
- Android中使用HttpURLConnection和HttpClient实现GET和POST请求访问网络
- android HttpClient get请求与post请求工具类
- Android--httpclient模拟post请求和get请求
- HttpClient框架发送get和post网络请求
- httpClient----Post 和 GET请求
- HTTPCLIENT POST GET请求模拟
- HTTPClient get post 请求方式
- HttpClient Post、get 请求方式
- LINUX 进程控制程序设计
- QWT安装配置,控件在Qtcreator中显示 (基于Ubuntu12.04)
- android的fragment讲解
- 位运算
- 指针、数组的相关操作
- 解决Android httpclient网络post/get请求性能优化
- ping linux和windows下的参数与区别
- Linux IO地址
- Android email中无法登陆gmail邮箱 M
- java ---- MenuFrame事件
- 用 Java编 写 的 浏 览 器 HotJava。
- Fragment 和 FragmentActivity的使用(二)
- 阿斯钢阿gas规范
- Android跨进程通信 AIDL方式