Android 8.1 Doze模式分析(四)——Doze模式的退出

本文详细分析了Android 8.1 Doze模式的退出条件,包括屏幕亮屏、充电状态改变和设备移动。当这些情况发生时,系统会通过特定的方法退出Doze状态,回到ACTIVE状态。文章探讨了各种退出场景下的处理流程,如广播接收、Binder调用和服务交互等。
摘要由CSDN通过智能技术生成

概述

Doze的退出,说的更严格一点,就是当Doze模式的状态由其他状态变为ACTIVE状态。简而言之,退出Doze模式有三种情况:屏幕亮屏、插入充电器、设备有移动。下面就这三种情况进行下分析。

在前面的分析中我们有见到过becomeActiveLocked()方法,这个方法当时没有进行分析,这个方法就是用来退出Doze的,严格来说,是将Doze状态置为了ACTIVE状态,从而退出IDLE状态或MAINTENANCE状态。因此,不管是何种方式退出Doze,都会调用这个方法。该方法如下:

void becomeActiveLocked(String activeReason, int activeUid) {
   
    if (mState != STATE_ACTIVE || mLightState != STATE_ACTIVE) {
   
        //设置一个Handler,在Handler中通知PMS、发送idle changed 广播
        scheduleReportActiveLocked(activeReason, activeUid);
        //将DeepDoze状态值置为STATE_ACTIVE
        mState = STATE_ACTIVE;
        //将LightDoze状态值置为LIGHT_STATE_ACTIVE
        mLightState = LIGHT_STATE_ACTIVE;
        //多久后进入INACTIVE状态
        mInactiveTimeout = mConstants.INACTIVE_TIMEOUT;
        mCurIdleBudget = 0;
        mMaintenanceStartTime = 0;
        //重置DeepDoze相关属性值、alarm、listener等
        resetIdleManagementLocked();
        //重置LightDoze相关属性值、alarm、listener等
        resetLightIdleManagementLocked();
    }
}

1.屏幕亮灭屏

当亮屏或灭屏时,PMS发送亮灭屏广播,DIC中监听了亮灭屏的广播,负责接受该广播并进行屏幕状态改变后的操作:
注册广播:

filter = new IntentFilter();
filter.addAction(Intent.ACTION_SCREEN_OFF);
filter.addAction(Intent.ACTION_SCREEN_ON);
getContext().
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值