`
jiaby008
  • 浏览: 656 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

后台应用不应做Android待机电池杀手

 
阅读更多
Android是一个相当开放的平台,允许我们开发常驻后台运行的应用程序,依靠TCP长连接接受服务器的消息推送,但也因此在电量消耗方面广遭诟病。如果开发者,特别是类IM应用的开发者自己还不去了解Android底层的机制,没准搞出来的应用就变成待机电池杀手了。

Android手机有两个处理器,一个叫Application Processor(AP),一个叫Baseband Processor(BP)。AP是ARM架构的处理器,用于运行Linux+Android系统;BP用于运行实时操作系统(RTOS),通讯协议栈运行于BP的RTOS之上。非通话时间,BP的能耗基本上在5mA左右,而AP只要处于非休眠状态,能耗至少在50mA以上,执行图形运算时会更高。另外LCD工作时功耗在100mA左右,WIFI也在100mA左右。一般手机待机时,AP、LCD、WIFI均进入休眠状态,这时Android中应用程序的代码也会停止执行。

Android为了确保应用程序中关键代码的正确执行,提供了Wake Lock的API,使得应用程序有权限通过代码阻止AP进入休眠状态(iOS、WP7都没这种东西)。如果不领会Android设计者的意图而滥用Wake Lock API,为了自身程序在后台的正常工作而长时间阻止AP进入休眠状态,后果就相当严重了。

首先,完全没必要担心AP休眠会导致收不到消息推送。通讯协议栈运行于BP,一旦收到数据包,BP会将AP唤醒,唤醒的时间足够AP执行代码完成对收到的数据包的处理过程。其它的如Connectivity事件触发时AP同样会被唤醒。那么唯一的问题就是程序如何执行向服务器发送心跳包的逻辑。你显然不能靠AP来做心跳计时。Android提供的Alarm Manager就是来解决这个问题的。Alarm运行在BP上,触发时唤醒AP执行程序代码。那么Wake Lock API有啥用呢?比如心跳包从请求到应答,比如断线重连时验证密码这些关键逻辑的执行过程,就需要Wake Lock来保护。而一旦一个关键逻辑执行成功,应该立即释放掉Wake Lock了。心跳间隔也不宜过短,至少隔个10分钟吧。

服务器端也不要有事没事都向客户端推送TCP包。客户端后台运行时,最好只在必须要客户端立即在状态栏显示内容时推送一个包,别的数据都得缓存起来,等待客户端进入前台运行时主动请求,或者也可以加在心跳请求的应答中带给客户端。因为每推送一次,客户端都得唤醒AP处理这个推送。这个说起来容易,但作为一个后台TCP长链接的应用,服务端很可能会在一些逻辑的设计上图省事而抑制不住立即向客户端推送的冲动。
分享到:
评论

相关推荐

    Android 待机流程解析

    Android 待机流程解析 Android 系统的待机流程解析是整个 Android 系统的核心机制之一。在 Android 系统中,待机流程解析是指系统从开机到锁屏的整个过程。这个过程涉及到多个组件和类的交互,包括 ...

    Android 待机流程

    ### Android待机流程详解 #### 一、概览 Android系统的待机流程是用户界面管理中的一个重要组成部分,它涉及到系统如何处理设备锁屏状态下的各种交互逻辑。在Android 2.2版本中,这一过程主要由`...

    Android待机流程分析---锁屏、解锁模块.

    ### Android待机流程分析——锁屏、解锁模块 在深入探讨Android系统中锁屏与解锁模块的工作原理之前,我们先来了解一下这些概念的基本背景。Android操作系统作为全球最广泛使用的移动设备操作系统之一,其用户界面...

    android_开启关闭待机demo

    在Android系统中,待机模式是设备为了节省电量而自动进入的一种状态,通常在用户无操作一段时间后触发。"android_开启关闭待机demo"是一个示例项目,它展示了如何控制设备的待机行为,即阻止手机进入待机状态以及...

    4.4以下计算电池软件消耗

    通过这些信息,用户可以识别出哪些应用是电池的“罪魁祸首”,并采取措施如限制后台活动、卸载不常用应用等来延长电池寿命。 电池软件消耗主要包括以下几个方面: 1. 应用程序:每个运行的应用都会消耗电池,特别...

    Android 检测判断手机的待机状态.rar

    Android 检测判断手机的待机状态,比如手机正在处于待机状态、手机正在响铃、手机正在震动、手机已接听电话、手机正在连接来电等等的一些状态,使用了Case语句来判断各个状态。  case TelephonyManager.CALL_STATE_...

    真待机补丁有效.zip

    2. **后台应用管理**:许多应用会在后台持续运行,即使设备看似已经待机。真待机补丁会限制这些应用的行为,防止它们在待机时占用资源,进一步减少功耗。 3. **唤醒锁控制**:唤醒锁是Android中的一种机制,用于...

    Android电池信息

    7. **使用和待机时间**:Android系统有时会显示过去一段时间内电池的使用和待机时间,这有助于用户了解哪些应用或服务消耗了大量电量。 为了获取这些信息,用户可以通过以下方式: - **设置**:进入手机的“设置”...

    Android待机画面滑动代码实例

    1. **Activity和Service**: 在Android系统中,Activity是用户界面的主要组件,而Service则用于在后台运行不依赖于用户界面的任务。在实现待机画面滑动功能时,我们可能需要结合使用这两者,因为滑动操作通常与...

    Android平板电脑电池电量如何优化.docx

    此外,关闭不必要的后台应用,限制WiFi和蓝牙在不使用时的自动连接,以及合理设置应用的更新频率也能有效节省电力。 对于游戏爱好者,可以选择一些对硬件需求较低的游戏,或者在游戏时调整画面质量,关闭不必要的...

    STR待机在Android终端的应用与实现方法.pdf

    STR(Suspend to RAM)待机模式是Android系统中的一种节能机制,它主要应用于Android智能电视和电视盒子等设备,目的是提高开机速度和优化用户体验。STR模式下,系统会将当前运行状态的数据存储在内存(DDR)中,...

    Android电池消耗统计[定义].pdf

    在Android系统中,电池消耗统计是一项关键功能,它帮助用户了解设备上各个应用程序和系统服务对电池寿命的影响。本文将详细解析Android 4系统中电池消耗统计的原理、方法以及可能存在的问题。 首先,Android 4系统...

    Android 后台运行白名单实现保活

    Android 系统为了省电增加了休眠模式,系统待机一段时间后,会杀死后台正在运行的进程。但系统会有一个后台运行白名单,白名单里的应用将不会受到影响。在原生系统下,通过「设置」 - 「电池」 - 「电池优化」 - 「...

    Android源码——andbatdog电池监控.zip

    3. **BatteryStats**: `BatteryStats` 是Android中用于统计电池使用情况的类,它记录了电池的充电状态、使用时间、待机时间等。这些数据可用于分析应用的功耗性能。 4. **Intent.ACTION_POWER_CONNECTED / ACTION_...

    Android应用源码之手机电量测试.zip

    这个“Android应用源码之手机电量测试.zip”包含了一个这样的应用的源代码,它可以帮助用户了解设备的电池状态,监控电量消耗,并提供一些电池管理建议。下面,我们将详细探讨这个应用背后的Android电池API、电量...

    另类寻找Android恶意应用.pdf

    近年来,随着Android系统的普及,针对该平台的恶意应用也在不断增加,导致用户面临着各种各样的手机问题,这些问题包括但不限于待机耗电过快、无缘故的流量超标、APP异常崩溃、手机发烫以及广告骚扰等。这些问题的...

    腾讯电池管家 For Android v1.2.0.zip

    《腾讯电池管家For Android v1.2.0:专业安卓电量管理详解》 在移动设备日益普及的今天,电池续航成为用户关注的重点。腾讯电池管家作为一款专为Android系统设计的免费省电工具,旨在帮助用户优化电池使用,延长...

    Android7.0版本升级安装

    4. 改进的Doze模式:Android 7.0进一步优化了电池管理,Doze模式在设备静止时更加严格地限制应用活动,延长待机时间。 5. 文件夹加密:系统支持对SD卡上的特定文件夹进行加密,增强了数据安全性。 6. 更强的权限...

    Linux Kernel and Android 休眠与唤醒(中文版)

    例如,Android的休眠可能需要考虑后台运行的应用程序、网络连接状态以及用户设置的电源管理选项。此外,Android还使用了`Wake Lock`机制,这是Linux内核中没有的特性,允许应用程序在必要时保持设备的活跃状态。 ...

    android休眠与唤醒驱动流程分析

    android休眠与唤醒驱动流程分析 android wakelock 休眠 唤醒

Global site tag (gtag.js) - Google Analytics