阅读更多

1顶
0踩

移动开发

转载新闻 移动网络下的性能优化之省电篇

2016-02-26 15:21 by 副主编 mengyidan1988 评论(2) 有4981人浏览



随着3G和4G网络的普及,用户使用APP的场景更多地集中在移动网络下。同时也带来了手机电量消耗更快和网络延迟更高的问题。想开发出用户体验更好的应用,就需要对移动网络有更深入的了解。本系列文章分为上下两篇,分别介绍如何开发出更省电和网络延迟更低的移动应用程序。本篇文章主要介绍移动网络的一些基本工作原理以及降低手机耗电的优化方案。

初窥2G,3G,4G网络

说起移动网络我们不得不提香农定理。香农定理是所有通信制式最基本的原理,它描述了有限带宽、有随机热噪声信道的最大传输速率与信道带宽、信号噪声功率比之间的关系。其用公式可表示为:
C = B lb(1+S/N)

其中:C是信道支持的最大速度或者叫信道容量;B是信道的带宽;S是平均信号功率;N是平均噪声功率;S/N即信噪比。

移动网络技术的发展也无法跳出这个公式。从最初的1G网络技术到现在的4G网络技术,都是在利用这个公式提高速度。要么让频段资源得到充分的利用,要么提高整体带宽。但是无论如何改进,频段资源都是有限的。在拥挤的城市或者人扎堆的地方,很容易分配不到无线资源。即使分配到资源,也会因为使用人数过多而导致速度变慢。所以不得不制定出更优秀的策略来提高资源的有效利用。这就是我们下面要讲的无线资源控制(RRC)。
无线资源控制(RRC)

什么是无线资源控制协议呢?我们先来看看手机发送一条信息的通信过程。

欲通信,先同步。手机在空闲状态下是无法通信的,当有通信需求时,手机会自动搜索信号,直到它搜到一个“信号非常强的全0序列”,就完成了锁定某个频道的过程。锁定频道之后,手机接下来就需要和通信系统校准时间,这就是同步过程。

欲接入,先申请。取得了频率和时间上的同步后,手机向控制平台发送通信请求,控制平台收到请求后,会找到空闲的时隙资源(时分多址技术中术语)分配给手机,并将手机切换到Active状态,这样手机就可以通信了。通信完成后,过一段时间,控制平台又会回收手机占用的通信资源,进入低耗能模式或者空闲模式。整个这一通信过程就是RRC所做的事情。

移动网络耗电的原因

前面提到了控制平台下不同模式的切换,下面是它的具体工作原理:手机在不传输数据的情况下一般处于空闲状态(Idle),当有发送数据需求时必须向控制平台发送申请。只有将手机切换到Active状态,也就是高耗能模式下才能进行通信。这一切换过程在4G网络下需要花费100ms的时间。通信完成后,手机不会一直处于高耗能模式下等待数据传输,它会切换到低耗能模式(Short sleep)。如果手机处于低耗能模式时接到数据发送请求,那么它又会切换到高耗能模式来发送数据。在频繁的数据请求中,它会在低耗能模式和高耗能模式不断的切换,而在不发送数据时,在10s后会再次进入空闲模式下。它会周期性的切换模式来确保资源的有效利用。

为什么存在耗能模式切换呢?因为无线资源是相对短缺的资源,在没有数据请求时就要对无线资源进行回收。



移动网络只有在处于DCH(高耗能模式)和 FACH(低耗能模式)下才会消耗手机电量。从上图可以看出,一次耗能模式切换大概需要花费10s,而且不管你传输的数据大小,它都会触发一次耗电周期,消耗10s的电量。

假如一个手机有5Wh(18000 J)总电量,手机完成一次从空闲模式切换到高耗能模式,再到低耗能模式,再到空闲模式的循环大概需要10J能量。如果每分钟切换一次,那么一个小时需要消耗60*10J = 600J电量,也就相当于总电量的3%。如果一个APP在后台每分钟发送一个请求,那么手机处于待机状态下一天就耗掉了3%* 24 = 72%的电。这就是为什么智能手机即使在待机状态下耗电量也非常大的原因。
如何省电

下面是我们根据上面提到的原因给出的五个可行的优化方案:

合并请求

在移动通信中,无论传输数据大小,每次数据传输都会触发一次大约10s的耗电。合并请求不仅能减少 DNS请求时间、服务器压力和HTTP请求,而且能够大大减少移动网络下手机电量的消耗。

预取数据

和合并请求原理一样,预取数据能让手机快速切换到空闲模式,并且在这个状态下保持更长的时间,以达到省电的目的。

避免轮询

轮询是指不管服务器端有没有更新,客户端都定时的发送请求进行查询。轮询可能会返回更新的信息,也可能会返回空的信息。轮询不仅增加了服务负担,而且会使手机长期处于高耗能模式,在几小时内就耗尽电池。

重连机制优化

一般重连机制都有几个重要参数:心跳时间间隔、重连超时时间及重连次数。其中心跳包每天会将手机从空闲模式唤醒近300次,一般的Android手机每天有超过15-20%的电量被消耗在发送过度频繁的心跳上。另外如果手机连不上服务器而不断的重试,在几小时内就会耗光电池。所以心跳时间不宜过短,据测试微信心跳时间为300s,可以作为一个参考。同样也不能永无休止的重连,重连几次还连不上,可以直接把问题抛给用户,由用户决定是否继续重连。

数据缓存

最省电的方式就是不使用移动网络,数据缓存能够大大减少网络请求的次数,达到省电的效果。

以上就是降低手机电量消耗的优化方案。在下一篇文章中,我们会详细分析移动网络延迟较高的原因,并给出降低网络延迟的方案,敬请期待。

本文来自:WildDog Blog
  • 大小: 52.8 KB
  • 大小: 181.4 KB
来自: WildDog Blog
1
0
评论 共 2 条 请登录后发表评论
2 楼 shuhen2011 2016-04-05 08:11
尽量少使用网络
1 楼 jerome0815 2016-02-29 10:47
不错  虽然是门外汉 但道理听得懂

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 转:移动网络下的性能优化之省电篇

    移动网络下的性能优化之省电篇 随着3G和4G网络的普及,用户使用APP的场景更多地集中在移动网络下。同时也带来了手机电量消耗更快和网络延迟更高的问题。想开发出用户体验更好的应用,就需要对移动网络有更...

  • 性能优化之省电篇

    移动网络下的性能优化之省电篇 2016年2月20日王, 军鹏 随着3G和4G网络的普及,用户使用APP的场景更多地集中在移动网络下。同时也带来了手机电量消耗更快和网络延迟更高的问题。想开发出用户体验更好的应用,...

  • flutter性能优化大全

    Flutter的性能优化技巧包括减少Widget重建、避免过多的UI重绘、优化图片加载、避免过多的网络请求、优化布局、使用异步操作、避免过多的内存使用、使用热重载等。综上所述,避免过多的内存使用是Flutter中的一个重要...

  • Andorid性能优化(七) 之 省电开发技巧总结

    在今天移动互联网蓬勃发展的浪潮下,再好的智能手机也能逃每天一充电的情况。而一款App的好用与否,电量的耗费也是衡量的重要指标之一。今天我们就来一起探索Android中电量的相关知识以及讲讲App进行省电优化的一些...

  • 深入探索 Android 网络优化(二、网络优化基础篇)下

    网络优化

  • 面试官: 说一下你做过哪些性能优化? 这篇带你搞懂性能优化

    如果你已经有 2 - 3 年以上开发经验还不懂的怎么去优化自己的项目,那就有点说不过去了,下面是我自己总结的一套通用级别的 Android 性能优化。如果图片不清晰文末可以下载原始 xmind 图。 如果你正在找工作, 那么...

  • android 省电算法,Android 移动性能优化

    否则在磁盘空间不足情况下,容易引起写入放大。将IO操作移到非主线程中执行即可。5、利用缓冲区,会有效减少磁盘IO的操作次数。先将对象序列化后的信息写入到缓存区中,然后再一次性写入到磁盘上。6、合理设置Buffer...

  • UNITY性能优化✨ProtoBuf 在 Unity 中的详细使用教程

    解决流量过大的基本方法就是使用高度压缩的通信协议,而数据压缩后流量减小带来的自然结果也就是省电:因为大数据量的传输必然需要更久的网络操作、数据序列化及反序列化操作,这些都是电量消耗过快的根源。...

  • 一.Android省电开发之性能优化

    电量优化 Android应用开发中的网络、定位、传感器等都是比较耗电的特性,我们应该正确使用API来有效降低应用的耗电量。 1.BroadcastReceiver: 在代码实现中需要尽量避免无用操作代码的执行,减少应用损耗的电量。 ...

  • 《移动App性能评测与优化》— Android 书籍

    文章目录第1章 越用越卡为哪般—降低待机内存 1第2章 手机发烫是为何—降低耗电量 35第3章 怎样才能如丝般顺滑—流畅度评测 57第4章 坑爹的路线如何破—导航评测 93第5章 修一条时刻畅通的高速路—网络优化 119第6章...

  • Android性能优化之APK优化,看看这篇文章吧!

    … 三、性能优化 1、做过哪些APP稳定性方面优化? 2、业务稳定性如何保障? 3、如果发生了异常情况,怎么快速止损? 4、启动优化是怎么做的? 5、是怎么异步的,异步遇到问题没有? 6、版本迭代导致的启动变慢有好...

  • Android性能优化-电量优化,布局优化和网络优化

    此篇博客主要是参考《Android高级进阶》,关于Android开发过程性能优化中的电量优化,布局优化和网络优化做一个记录。

  • 性能优化总结

    性能优化方向 流畅(启动速度、卡顿) 稳定(内存泄漏、崩溃) 功耗(耗电、网络) 安装包(包体积) 一、 流畅  卡顿优化 1、 布局优化 简单布局使用Java代码代替布局文件 Android加载Xml布局文件,并将其转换成View...

  • Android 进阶——性能优化之电量优化全攻略及实战小结(二)

    性能优化之电量优化全攻略及实战小结

  • Android App性能优化总结

    综上所述,对APP进行性能优化已成为开发者该有的一种综合素质,也是开发者能够完成高质量应用程序作品的保证。 本着人道主义,一切从用户体验的角度去思考,当我们置身处地得把自己当做用户去玩一款应用时候,那么...

  • Android应用开发性能优化完全分析

    1 背景其实有点不想写这篇文章的,但是又想写,有些矛盾。...大多数都是嘴上喊喊或者死记住规则而已(当然了,这话我自己听着都有些刺耳,实在不好意思,其实关于性能优化的优质博文网上也还是有很多

  • android性能优化之耗电优化

    android性能优化之耗电优化

  • 基于springboot大学生就业信息管理系统源码数据库文档.zip

    基于springboot大学生就业信息管理系统源码数据库文档.zip

  • 基于java的驾校收支管理可视化平台的开题报告.docx

    基于java的驾校收支管理可视化平台的开题报告

Global site tag (gtag.js) - Google Analytics