Android网络负载请求优化方案设计

2015-05-30 22:04谭东杨德刚
中国新通信 2015年2期
关键词:网络架构网络优化网络

谭东 杨德刚

【摘要】 目前Android平台的应用越来越多,基于Android平台的开发者也越来越多。对于手机平台来说,如何在这么小的平台上流畅的运行一个程序变得越来越重要。其中网络负载请求这块是APP性能优化的一个重要的部分。高性能的APP一般网络数据请求效率也都非常的高,体验自然会得到提升。本文从Android平台移动APP的网络负载请求优化入手,分析和设计一个基于APP网络数据请求模块的架构和优化设计方案。

【关键词】 Android 网络 网络优化 网络架构

一、Android系统结构概述

1.1 Android架构分析

Android是基于Linux的一套完善的开源移动终端平台操作系统,系统架构和其操作系统一样,采用了分层的架构。从架构图看,android分为四个层,从高层到低層分别是应用程序层、应用程序框架层、系统运行库层和linux核心层。

1.2 Android网络模块分析

Android网络模块一般分为两种:基于Http协议的,基于Socket的。一般Socket是涉及到通讯聊天方面的APP采用的协议。这里我们只分析基于Http协议的部分。ANDROID系统网络连接和管理服务由四个系统服务ConnectivityService、NetworkPolicyManagerService、NetworkManagementService、NetworkStatsService共同配合完成网络连接和管理功能。几个网络管理服务搭配电源管理服务,会针对各个网络环境下,如2G,3G,4G,Wifi和无网络环境下的网络处理和电量相关优化处理。

目前Android4.0后的系统是不允许任何网络耗时请求在UI线程中操作请求,想请求网络操作必须单独去开启一个线程或者异步任务去处理相关网络操作,这样不会阻塞UI线程,当操作完成后通知UI线程更新界面和相应的逻辑。

二、Android网络负载请求优化方案

2.1 Android 网络优化分析

一般造成APP卡顿不流畅,数据请求缓慢的网络相关原因有:多网络请求同时异步并发;网络请求的生命周期没有和Activity和生命周期的联动,Activity关闭后也可能某个网络请求还在后台进行;网络请求的优先级处理不合理;重复网络请求;网络数据接口设计不合理;没有设置网络数据缓存;网络请求的图片没有做缓存处理;创建过多的不必要对象,造成频繁GC等。

2.2 APP架构设计

采用MVC设计模式,逻辑业务,数据和视图层分离。这样在后期改进和个性化定制时不需要重新编写业务逻辑。网络请求框架采用谷歌自己的框架Volley。Volley是Ficus Kirpatrick在Gooogle I/O 2013发布的一个处理和缓存网络请求的库,能使网络通信更快,更简单,更健壮。Volley提供JSON,图像等的异步下载;网络请求的排序(scheduling);网络请求的优先级处理;缓存,多级别取消请求,和Activity和生命周期的联动(Activity结束时同时取消所有网络请求)。

2.3 Android优化方案设计

在APP的程序中Application里创建一个全局网络负载请求线程池,用于管理整个APP的网络请求,并进行优先级排序处理。单例模式,保证APP全局只有一个网络请求实例,避免创建过多对象,无法管理,耗费系统资源。网络线程池开辟一块内存空间,里面存放了众多(未死亡)的线程,池中线程执行调度由池管理器来处理。当有线程任务时,从池中取一个,执行完成后线程对象归池,这样可以避免反复创建线程对象所带来的性能开销,节省了系统的资源。

优先级请求排序策略。设置线程池的核心线程数和最大线程数。所有 BlockingQueue 都可用于传输和保持提交的任务。可以使用此队列与池大小进行交互:如果运行的线程少于 corePoolSize,则 Executor 始终首选添加新的线程,而不进行排队;如果运行的线程等于或多于 corePoolSize,则 Executor 始终首选将请求加入队列,而不添加新的线程;如果无法将请求加入队列,则创建新的线程,除非创建此线程超出 maximumPoolSize,在这种情况下,任务将被拒绝。

网络请求及时回收,与Activity同生命周期控制。在APP的全局Application里暴露一个添加和关闭回收网络请求的List,用来及时的维护和销毁网络负载请求。这样如果一个Activity停止的时候,同时取消所有或部分未完成的网络请求。这样就做到了多级别取消请求和Activity和生命周期的联动。

合理的数据库接口对接设计。在不影响数据库请求效率和负载的前提下,用尽可能的少的接口去为APP提供数据。例如一个APP的界面Activity,尽量用最少的请求获取网络数据。这样少量的网络请求会提升APP稳定性和流畅性。

设置网络超时时间和网络请求缓存。对于网络请求如果不设置合理的超时时间,会导致某个请求在服务器没有返回数据的情况下,不停地一直在后台运行,耗费内存,所以设置超时时间会避免这一问题的出现。同时可以根据需要适当设置下网络请求缓存,当重复请求某个接口时在规定的缓存有效时间内,读取网络缓存,可以减少耗费流量和优化速度。

设立数据库缓存机制。可以使用内置SQlite进行相应的网络返回的数据进行缓存。优先存储一些固定的信息到数据库,例如用户的永远不会变得信息,如id,性别,出生日期类似的。笼统的说,不变文件的缓存时间是永久,变化文件的缓存时间是最大忍受不变时间。采用缓存,可以进一步大大缓解数据交互的压力,又能提供一定的离线浏览。当然缓存的数据需要更新的也要及时更新缓存。

设置图片缓存,并且针对列表ListView或GridView等进行优化。图片处理加载在Android开发中经常会用到,图片加载是一个非常耗费内存的,过大和过多就会造成内存溢出。简单的缓存逻辑就是缓存网络图片到本地文件夹,下次重复加载时判断本地缓存是否有,有的话读取本地缓存,没有就重新获取,加载网络图片也是异步处理。图片处理要考虑多线程,缓存,内存溢出等很多方面。对于一些缩略图和原图显示要处理得当,缩略图显示的地方要讲图片压缩处理合适尺寸。像ListView和GridView这种列表在滚动和停止时要对图片加载进行处理,滚动时停止图片加载工作,停止滚动列表后再进行加载图片数据。这样可以避免滑动中列表卡顿和内存溢出情况。

三、总结

对于APP性能方面的优化有很多方面,其中网络方面是一个重要的方向,大部分的APP的数据都是要和网络打交道,所以很好的使用网络请求、根据不同的情况和需求进行变更算法和优化策略尤为重要。良好的优化网络策略会让APP变得更加的快速,体验更加的优秀。

猜你喜欢
网络架构网络优化网络
农产品质量安全追溯系统的混合模式研究
信息办公平台网络优化设计
无线传感器网络优化的应用与研究
运用负载均衡技术来实现网络优化
油气集输系统信息化发展形势展望
基于网络的信息资源组织与评价现状及发展趋势研究
基于网络的中学阅读指导
新形势下地市报如何运用新媒体走好群众路线
金融私有云网络架构研究
基于身份/位置分离的新型宽带移动IP网