上一篇博客分析了PowerManagerService的各种状态,最后分析到dream相关,讲的不详细。这里我们再分析下。
一、Dream关闭
首先我们结合打印的log,看看handleSandman函数,log直接加在下面的函数中。当然我们现在说的情况是mWakefulness是dozing状态。
private void handleSandman() {
final boolean startDreaming;
final int wakefulness;
synchronized (mLock) {
mSandmanScheduled = false;
wakefulness = mWakefulness;
if (mSandmanSummoned && mDisplayReady) {
startDreaming = canDreamLocked() || canDozeLocked();
Slog.d(TAG, "handleSandman startDreaming:" + startDreaming);
mSandmanSummoned = false;
} else {
startDreaming = false;
}
}
final boolean isDreaming;
if (mDreamManager != null) {
if (startDreaming) {
mDreamManager.stopDream(false );
mDreamManager.startDream(wakefulness == WAKEFULNESS_DOZING);
}
isDreaming = mDreamManager.isDreaming();
Slog.d(TAG, "handleSandman isDreaming:" + isDreaming);
} else {
Slog.d(TAG, "handleSandman mDreamManager null");
isDreaming = false;
}
synchronized (mLock) {
if (startDreaming && isDreaming) {
mBatteryLevelWhenDreamStarted = mBatteryLevel;
if (wakefulness == WAKEFULNESS_DOZING) {
Slog.i(TAG, "Dozing...");
} else {
Slog.i(TAG, "Dreaming...");
}
}
if (mSandmanSummoned || mWakefulness != wakefulness) {
return;
}
if (wakefulness == WAKEFULNESS_DREAMING) {
Slog.d(TAG, "handleSandman WAKEFULNESS_DREAMING");
if (isDreaming && canDreamLocked()) {
if (mDreamsBatteryLevelDrainCutoffConfig >= 0
&& mBatteryLevel < mBatt
cpp
运行