`
Jclick
  • 浏览: 189217 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

【转】wakelock使用注意事项

 
阅读更多

一楼:

默认情况下,Android设备会在一段时间后使屏幕变暗,然后关闭屏幕显示,最后停止CPU,有时用户并不希望如此,因此Android提供了WakeLock类让用户实现自定义的电源管理,但是如果不合理使用这个功能,应用程序造成的电池电量消耗产生显著的影响,所以建议当用户观看屏幕但是很少与屏幕进行交互时(如看视频)使用,从而防止屏幕变暗。

二楼:

如果一开始就对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进入休眠状态。但如果不领会Android设计者的意图而滥用Wake Lock API,为了自身程序在后台的正常工作而长时间阻止AP进入休眠状态,就会成为待机电池杀手。比如前段时间的某应用,比如现在仍然干着这事的某应用。

首先,完全没必要担心AP休眠会导致收不到消息推送。通讯协议栈运行于BP,一旦收到数据包,BP会将AP唤醒,唤醒的时间足够AP执行代码完成对收到的数据包的处理过程。其它的如Connectivity事件触发时AP同样会被唤醒。那么唯一的问题就是程序如何执行向服务器发送心跳包的逻辑。你显然不能靠AP来做心跳计时。Android提供的Alarm Manager就是来解决这个问题的。Alarm应该是BP计时(或其它某个带石英钟的芯片,不太确定,但绝对不是AP),触发时唤醒AP执行程序代码。那么Wake Lock API有啥用呢?比如心跳包从请求到应答,比如断线重连重新登陆这些关键逻辑的执行过程,就需要Wake Lock来保护。而一旦一个关键逻辑执行成功,就应该立即释放掉Wake Lock了。两次心跳请求间隔5到10分钟,基本不会怎么耗电。除非网络不稳定,频繁断线重连,那种情况办法不多。

 

【转自】http://www.dewen.org/q/2227?sort=active

分享到:
评论

相关推荐

    Android保持屏幕常亮唤醒状态的方法

    5. **注意事项**: - 为了避免内存泄漏,确保在不需要`WakeLock`时总是释放它。即使Activity意外结束,你也应该在`onDestroy()`中释放`WakeLock`。 - 使用`WakeLock`时,务必考虑到电池寿命和用户体验。不要在不...

    android中的屏幕唤醒

    ### 四、注意事项 - 在使用`WakeLock`时,务必确保在不再需要保持屏幕亮起时释放它,以避免不必要的电池消耗。 - 使用`DISABLE_KEYGUARD`权限时要特别小心,因为它可能对用户隐私造成潜在威胁,应仅在确实需要的...

    Android屏幕常亮

    注意事项** - 当使用`WakeLock`时,一定要记得在适当的时候释放它,否则会浪费电池。 - `FLAG_KEEP_SCREEN_ON`是一种更轻量级的实现方式,当Activity失去焦点时,系统会自动释放该标志,避免不必要的电池消耗。 - ...

    Unity调用Android系统PowerManager类功能.zip

    - 唤醒锁(WakeLock):`PowerManager.WakeLock`接口提供了控制设备保持唤醒的能力。开发者可以创建不同类型的唤醒锁,如PARTIAL_WAKE_LOCK(允许CPU运行但不亮屏)或FULL_WAKE_LOCK(CPU运行并亮屏)。创建唤醒锁...

    Android 不休眠 不锁屏

    5. **注意事项**: - 使用这些功能时,务必告知用户,并解释为何需要这些权限,以避免不必要的隐私担忧。 - 长时间保持屏幕常亮和不解锁会显著减少电池寿命,因此在非必要时应避免使用。 - 应用程序在后台运行时...

    創意Android 程式設計 SDK范例大全章节

    #### 五、其他注意事项 - **权限申请**:在Android应用中控制屏幕亮度需要在`AndroidManifest.xml`文件中声明`<uses-permission android:name="android.permission.WRITE_SETTINGS" />`权限。 - **兼容性问题**:...

    Android sp&wp 测试代码

    3. **注意事项**: - 使用完WakeLock后务必及时释放,否则可能导致设备无法正常休眠。 - 应用应申请相应的权限,如`<uses-permission android:name="android.permission.WAKE_LOCK" />`。 在Eclipse中,由于它...

    android 播放音频、视频的MediaPlayer使用时的注意事项.doc

    以下是对MediaPlayer使用时的一些关键注意事项的详细解释: 1. **生命周期管理**: - 在`onCreate()`方法中创建MediaPlayer对象时,它默认并不会处于prepared状态,而是初始化状态。你需要调用`prepare()`或`...

    ScreeLight.zip

    三、注意事项 1. 权限问题:调整系统亮度和控制息屏可能需要相应的权限,如`WRITE_SETTINGS`和`DEVICE_ADMIN`权限。 2. 能效考虑:过度使用常亮模式可能导致电池快速消耗,因此在不必要的时候应及时释放`WakeLock`...

    Android的屏幕禁止休眠和锁屏的方法

    #### 其他注意事项 - **权限问题**:从Android 6.0(API级别23)开始,系统对权限进行了更严格的管理,对于运行时权限如`WRITE_SETTINGS`,需要在运行时向用户请求。 - **用户体验**:虽然保持屏幕常亮可以提供良好...

    Android之通过距离传感器控制屏幕熄灭

    在5.5通过距离传感器控制屏幕熄灭的文件中,可能会包含具体的代码示例、阈值设定以及相关注意事项,帮助开发者更好地实现这一功能。通过对这些内容的深入理解和实践,开发者可以为Android应用添加更智能的交互体验。

    远程服务唤醒

    下面将详细阐述远程服务唤醒的工作原理、实现方法以及相关注意事项。 首先,远程服务唤醒的核心是BroadcastReceiver(广播接收器)。当设备接收到特定的广播事件,如网络连接状态变化或特定的自定义广播时,...

    软件内每日提醒功能实现

    6. **优化和注意事项**: - 注意合理设置提醒的时间间隔,避免过于频繁的提醒导致性能问题。 - 在用户不需要提醒时,如关闭应用或手动取消提醒时,记得取消相应的Alarm和WakeLock。 - 对于Android 8.0及以上版本...

    Android电源管理.doc

    - 定义变量:`PowerManager.WakeLock mWakeLock;` - onCreate()中创建并获取唤醒锁:`mWakeLock = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK, "XYTEST"); mWakeLock.acquire();` - onDestroy()中释放...

    Android Power Management.pdf

    **注意事项**: 1. 使用上述方法的应用程序必须在`AndroidManifest.xml`文件中声明以下权限: ```xml <uses-permission android:name="android.permission.WAKE_LOCK" /> ``` 2. 必须确保所有的锁都能正确释放...

    Android25闹钟项目——音乐播放

    2. 在Activity和Service中播放音乐的区别和注意事项。 3. 使用`OnPreparedListener`、`OnErrorListener`等监听器处理播放状态。 4. 如何在Service中创建和管理`MediaPlayer`,以及与Activity的交互。 5. 对于后台...

    Android闹钟开发

    六、优化与注意事项 1. 用户体验:确保有清晰的界面提示,方便用户查看和管理已设置的闹钟。 2. 资源管理:使用完WakeLock后记得释放,避免电池过度消耗。 3. 系统兼容性:考虑到Android版本差异,需要适配不同API...

    Android学习:点击应用休眠

    - 实现上述功能可能需要请求一些特殊权限,例如`<uses-permission android:name="android.permission.WAKE_LOCK" />`用于获取WakeLock权限。 5. **优化电池寿命**: - 当应用进入休眠状态时,开发者应确保已关闭...

    使用AlarmManager启动广播、服务、页面(Android定时器)

    五、注意事项 1. 频繁使用`AlarmManager`可能会消耗大量系统资源,因此建议合理设置触发时间和频率,避免对用户造成不必要的打扰。 2. 使用`setExact()`或`setExactAndAllowWhileIdle()`方法可以提高定时精度,减少...

    Android-通过简单的代码控制手机的屏幕和物理按键

    你可以通过获取`WakeLock`来控制屏幕的亮度和是否点亮。例如,调用`newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK, "My Tag")`创建一个唤醒锁,然后调用`acquire()`和`release()`方法来控制屏幕的开启和关闭。 ...

Global site tag (gtag.js) - Google Analytics