当前位置:js代码下载 >> 新闻中心 >> qq强制聊天新闻 >> 浏览文章
qq强制聊天新闻

Android应用程序的周期和网络优化

标签:应用,程序,周期,网络,优化 发布时间:2019年05月10日 点击11
分享数:27
Android应用程序的生命周期;

     在大部份情况下,每个Android应用都将运行在本身的Linux进程当中。当这个应用的某些代码必要实行时,进程就会被创建,并且将保持运行,直到该进程不再必要,而体系必要释放它所占用的内存,为其他应用所用时,才制止。

        Android一个紧张并且特别的特征就是,一个应用的进程的生命周期不是由应用自身直接控制的,而是由体系,根据运行中的应用的一些特性来决定的,包括:这些应用对用户的紧张性、体系的悉数可用内存。

         对于应用开发者来说,理解不同的应用组件(分外是Activity、Service、Intent Receiver)对应用进程的生命周期的影响,这是特别很是紧张的。假如没有精确地使用这些组件,将会导致当应用正在处理紧张的工作时,进程却被体系消毁的后果。


        对于进程生命周期,一个普遍的错误就是:当一个Intent Receiver在它的onReceiveIntent()方法中,接收到一个intent后,就会从这个方法中返回。而一旦从这个方法返回后,体系将会认为这个Intent Receiver不再处于运动状况了,也就会认为它的宿主进程不必要了(除非宿主进程中还存在其它的应用组件)。从而,体系随时都会消毁这个进程,收回内存,并中断其中还在运行的子线程。题目的解决办法就是,在IntentReceiver中,启动一个Service,如许体系就会知道在这个进程中,还有运动的工作正在实行。


         为了决定在内存不足情况下消毁哪个进程,Android会根据这些进程内运行的组件及这些组件的状况,把这些进程划分出一个“紧张性条理”。这个条理按顺序如下:
       1、前端进程是拥有一个表现在屏幕最前端并与使用者做交互的Activity(它的onResume已被调用)的进程,也可能是一个拥有正在运行的IntentReceiver(它的onReceiveIntent()方法正在运行)的进程。在体系中,这种进程是很少的,只有当内存低到不足于支撑这些进程的继承运行,才会将这些进程消毁。通常这时候,设备已经达到了必要进行内存整顿的状况北京人事考试网站,为了保障用户界面一直止相应,只能消毁这些进程;

      

2、可视进程是拥有一个用户在屏幕上可见的,但并没有在前端表现的Activity(它的onPause已被调用)的进程。例如:一个以对话框表现的前端activity在屏幕上表现,而它后面的上一级activity仍然是可见的。如许的进程是特别很是紧张的,一样平常不会被消毁,除非为了保障所有的前端进程正常运行,才会被消毁。

     

  3、服务进程是拥有一个由startService()方法启动的Service的进程。尽管这些进程对于使用者是不可见的,但他们做的通常是使用者所关注的事情(如后台MP3播放器或后台上传下载数据的网络服务)。因此,除非为了保障前端进程和可视进程的正常运行,体系才会消毁这种进程。

    

  4、后台进程是拥有一个用户不可见的Activity(onStop()方法已经被调用)的进程。这些进程不直接影响用户的体验。假如这些进程精确地完成了本身的生命周期(细致参考Activity类),体系会为了以上三种类型进程,而随时消毁这种进程以释放内存。通常会有许多如许的进程在运行着排名优化,因些这些进程会被保存在一个LRU列表中,以保证在内存不足时,用户最后看到的进程将在最后才被消毁。

     

 5、空进程是那些不拥有任何运动的应用组件的进程。保留这些进程的唯一理由是,做为一个缓存,在它所属的应用的组件下一次必要时,缩短启动的时间。同样的,为了在这些缓存的空进程和底层的核心缓存之间平衡体系资源,体系会经常消毁这些空进程。

      当要对一个进程进行分类时,体系会选择在这个进程中所有运动的组件中紧张等级最高的那个做为依据。可以参考Activity、Service、IntentReceiver文档,了解这些组件如何影响进程整个生命周期的更多细节。这些类的文档都对他们如何影响他们所属的应用的整个生命周期,做了细致的描述。


针对移动端的网络优化,适用 Android,同样适用于 iOS 和 H5

一个网络请求可以简单分为连接服务器 -> 获取数据两个部分。
其中连接服务器前还包括 DNS 解析的过程;获取数据后可能会对数据进行缓存。

一、连接服务器优化策略

1. 不用域名,用 IP 直连
省去 DNS 解析过程,DNS 全名 Domain Name System,解析意指根据域名得到其对应的 IP 地址。 如 http://www.esmo.cn/codekk3564 的域名解析效果就是 104.236.147.76。
首次域名解析一样平常必要几百毫秒西安人事考试网站,可通过直接向 IP 而非域名请求,节省掉这部分时间,同时可以预防域名劫持等带来的风险。
当然为了安全和扩展考虑,这个 IP 可能是一个动态更新的 IP 列表,并在 IP 不可用情况下通过域名访问。

2. 服务器合理部署
服务器多运营商多地部署,一样平常至少含三大运营商、南中北三地部署。
配合上面说到的动态 IP 列表,支撑优先级,每次根据地域、网络类型等选择最优的服务器 IP 进行连接。
对于服务器端还可以调优服务器的 TCP 拥塞窗口大小、重传超时时间(RTO)、最大传输单元(MTU)等。


二、获取数据优化策略

1. 连接复用
节省连接建立时间,如开启 keep-alive。
Http 1.1 默认启动了 keep-alive。对于 Android 来说默认情况下 HttpURLConnection 和 HttpClient 都开启了 keep-alive。只是 2.2 之前 HttpURLConnection 存在影响连接池的 Bug,详细可见:Android HttpURLConnection 及 HttpClient 选择

2. 请求合并
即将多个请求合并为一个进行请求,比较常见的就是网页中的 CSS Image Sprites。 假如某个页面内请求过多,也可以考虑做肯定的请求合并。

3. 减小请求数据大小
(1) 对于 POST 请求,Body 可以做 Gzip 压缩,如日志。

(2) 对请求头进行压缩
这个 Http 1.1 不支撑,SPDY 及 Http 2.0 支撑。 Http 1.1 可以通过服务端对前一个请求的请求头进行缓存,后面雷同请求头用 md5 之类的 id 来透露表现即可。

4. CDN 缓存静态资源
缓存常见的图片、JS、CSS 等静态资源。

5. 减小返回数据大小
(1) 压缩
一样平常 API 数据使用 Gzip 压缩,下图是之前测试的 Gzip 压缩前后对比图。 android-http-compare

(2) 精简数据格式
如 JSON 代替 XML,WebP 代替其他图片格式。关注公众号 codekk,回复 20 查看关于 WebP 的介绍。

(3) 对于不同的设备不同网络返回不同的内容 如不同分辨率图片大小。

(4) 增量更新
必要数据更新时,可考虑增量更新。如常见的服务端进行 bsdiff,客户端进行 bspatch。

(5) 大文件下载
支撑断点续传,并缓存 Http Resonse 的 ETag 标识,下次请求时带上,从而确定是否数据改变过,未改变则直接返回 304。


6. 数据缓存
缓存获取到的数据,在肯定的有用时间内再次请求可以直接从缓存读取数据。
关于 Http 缓存规则 Grumoon 在 Volley 源码解析最后杂谈中有细致介绍。

 
三、其他优化手段

这类优化体例在性能优化系列总篇中已经有过完备介绍
1. 预取
包括预连接、预取数据。

2. 分优先级、耽误部分请求
将不紧张的请求耽误,如许既可以削峰削减并发、又可以和后面类似的请求做合并。

3. 多连接
对于较大文件u宝在线,如大图片、文件下载可考虑多连接。 必要控制请求的最大并发量,毕竟移动端网络受限。

四、监控
优化必要通过数据对比才能看出结果,所以监控体系必不可少,通过前后端的数据监控确定调优结果。

 
TAG标签耗时:0.002140998840332 秒