PowerManager之UserActivity

1.何时发生UserActivity

如果我们在Settings中设置sleep时间为15s,那么15秒内如果没有任何操作,屏幕就会熄灭(当然,没有WakeLock未被释放是前提)。如果在这个时间内用户有操作:touch屏幕或者按下菜单键、返回键等,那么这时就会调用PowerManagerService的UserActivity方法,这样会重置那个timeout的时间。

这里有三个重要的时间,参考下图:


首先是screenOffTimeout,一般地,就是设置中的sleep时间,用户可选,有15s、30s、1min、2mins等。device admin和window manager可以override这个时间(PowerManager提供了相应的接口),但是override有要求:必须大于10s,并小于设置中的15s,否则是无意义的,如果这里override了,那么这个就是最终的结果,如果没有override,那么以setting中的为准。在我们后来的讨论中都假设用户选择了15s,而且没有override,所以screenOffTimeout=15s。

其次是screenDimDuration,它代表屏幕亮度处于dim的持续时间(屏幕的变化:bright--dim--off),它是0.2*15s=3s。如果用户在settings中设置的不是15s,而是1min,那么1min*0.2=12s,当大于7s时,取7s。

最后是screenButtonLightDuration,它代表button持续点亮的时间,是0.3*15s=4.5s,它也有最大值:8s。

好了,假设在屏幕点亮状态下,我按下了menu键会怎么样呢?会触发UserActivity,同时User activity event type是USER_ACTIVITY_EVENT_BUTTON,那么从按下menu键开始后,button处于点亮状态,screen处于bright首先button的背光持续4.5s点亮,之后熄灭,经过7.5s后screen由bright变为dim,持续3s后,screen off。



j


参考资源链接:[Android Power Manager详解:应用、框架与内核层控制](https://wenku.csdn.net/doc/2y7jv2riwr?utm_source=wenku_answer2doc_content) 要控制Android设备的电源状态,开发者可以利用`android.os.PowerManager`类提供的API来实现。首先,你需要在应用中获取`PowerManager`实例,通常在`Activity`或者`Service`中通过调用`getSystemService(Context.POWER_SERVICE)`方法来获取。接下来,可以使用`newWakeLock`方法来获取不同级别的唤醒锁,具体应用如下: - 使用`PARTIAL_WAKE_LOCK`可以防止CPU进入睡眠状态,但屏幕和键盘灯会关闭,适用于后台服务需要运行但不需要与用户交互的场景。 - `SCREEN_DIM_WAKE_LOCK`允许屏幕变暗,适用于需要在暗光下运行的轻量级任务。 - `FULL_WAKE_LOCK`适用于需要保持屏幕明亮的场景,比如播放视频时用户需要清楚地看到屏幕内容。 - `ACQUIRE_CAUSES_WAKEUP`和`ON_AFTER_RELEASE`可以与其他唤醒锁结合使用,以控制设备在特定时机唤醒或保持唤醒状态。 当用户进行操作时,通过调用`userActivity`方法可以确保设备保持活跃状态,并防止自动进入睡眠模式。此外,还可以根据业务需求使用`goToSleep`方法强制设备进入睡眠模式,但要确保具有相应的权限和在合适的时机调用。 这些唤醒锁和控制方法都是在应用层面上实现的,而在框架层,PowerManager服务与ActivityManager、WindowManager协作,通过Linux内核提供的电源管理接口,动态地调整设备的电源策略,以响应不同的系统事件和硬件状态。 要想深入理解这些概念,并学习如何在实际开发中应用,推荐阅读《Android Power Manager详解:应用、框架与内核层控制》。这份资料详细讲解了Android电源管理的架构,包括如何使用PowerManager API进行电源控制,以及如何在框架层和内核层进行电源状态的精确控制。通过这本书,你可以掌握如何在满足用户体验和性能需求的同时,最大程度地降低能耗,提升应用的稳定性和电池续航能力。 参考资源链接:[Android Power Manager详解:应用、框架与内核层控制](https://wenku.csdn.net/doc/2y7jv2riwr?utm_source=wenku_answer2doc_content)
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值