android 8.1 原生邮件,Android8.1原生systemUI导致framwork全局符号表溢出问题

这篇博客讨论了Android系统UI中Doze模式和Always On Display(AOD)策略的优化。作者分析了多个Java源文件的改动,包括AlwaysOnDisplayPolicy、DozeMachine、DozePauser等类,展示了如何实现节能和显示效果的平衡。通过清除不必要的观察者和注册,减少内存占用,以提高系统性能。
摘要由CSDN通过智能技术生成

diff --git a/packages/SystemUI/src/com/android/systemui/doze/AlwaysOnDisplayPolicy.java b/packages/SystemUI/src/com/android/systemui/doze/AlwaysOnDisplayPolicy.java

index debda21..9b69031 100644

--- a/packages/SystemUI/src/com/android/systemui/doze/AlwaysOnDisplayPolicy.java

+++ b/packages/SystemUI/src/com/android/systemui/doze/AlwaysOnDisplayPolicy.java

@@ -102,6 +102,14 @@

mSettingsObserver.observe();

}

+    public void clear() {

+        if (mSettingsObserver != null) {

+            //mSettingsObserver.clearObserve();

+            ContentResolver resolver = mContext.getContentResolver();

+            resolver.unregisterContentObserver(mSettingsObserver);

+        }

+    }

+

private int[] parseIntArray(final String key, final int[] defaultArray) {

final String value = mParser.getString(key, null);

if (value != null) {

@@ -130,7 +138,12 @@

false, this, UserHandle.USER_ALL);

update(null);

}

-

+/*

+        void clearObserve() {

+            ContentResolver resolver = mContext.getContentResolver();

+            resolver.registerContentObserver(this);

+        }

+*/

@Override

public void onChange(boolean selfChange, Uri uri) {

update(uri);

diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeMachine.java b/packages/SystemUI/src/com/android/systemui/doze/DozeMachine.java

index 8ec6afc..7d3dc3f 100644

--- a/packages/SystemUI/src/com/android/systemui/doze/DozeMachine.java

+++ b/packages/SystemUI/src/com/android/systemui/doze/DozeMachine.java

@@ -129,6 +129,13 @@

mParts = parts;

}

+    /** clear some reference stored in framework-system_server */

+    public void clear() {

+        for (Part p : mParts) {

+            p.clear();

+        }

+    }

+

/**

* Requests transitioning to {@code requestedState}.

*

@@ -348,6 +355,8 @@

*/

void transitionTo(State oldState, State newState);

+        default void clear() {}

+

/** Dump current state. For debugging only. */

default void dump(PrintWriter pw) {}

}

diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozePauser.java b/packages/SystemUI/src/com/android/systemui/doze/DozePauser.java

index 58f1448..f7f49225 100644

--- a/packages/SystemUI/src/com/android/systemui/doze/DozePauser.java

+++ b/packages/SystemUI/src/com/android/systemui/doze/DozePauser.java

@@ -50,6 +50,13 @@

}

}

+    @Override

+    public void clear() {

+        if (mPolicy != null) {

+            mPolicy.clear();

+        }

+    }

+

private void onTimeout() {

mMachine.requestState(DozeMachine.State.DOZE_AOD_PAUSED);

}

diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeScreenBrightness.java b/packages/SystemUI/src/com/android/systemui/doze/DozeScreenBrightness.java

index 4bb4e79..f31d3c6 100644

--- a/packages/SystemUI/src/com/android/systemui/doze/DozeScreenBrightness.java

+++ b/packages/SystemUI/src/com/android/systemui/doze/DozeScreenBrightness.java

@@ -38,6 +38,7 @@

private final Sensor mLightSensor;

private final int[] mSensorToBrightness;

private final int[] mSensorToScrimOpacity;

+    private final AlwaysOnDisplayPolicy mPolicy;

private boolean mRegistered;

private int mDefaultDozeBrightness;

@@ -58,16 +59,31 @@

mDefaultDozeBrightness = defaultDozeBrightness;

mSensorToBrightness = sensorToBrightness;

mSensorToScrimOpacity = sensorToScrimOpacity;

+

+        mPolicy = null;

}

@VisibleForTesting

public DozeScreenBrightness(Context context, DozeMachine.Service service,

SensorManager sensorManager, Sensor lightSensor, DozeHost host,

Handler handler, AlwaysOnDisplayPolicy policy) {

+/*

this(context, service, sensorManager, lightSensor, host, handler,

context.getResources().getInteger(

com.android.internal.R.integer.config_screenBrightnessDoze),

policy.screenBrightnessArray, policy.dimmingScrimArray);

+*/

+        mContext = context;

+        mDozeService = service;

+        mSensorManager = sensorManager;

+        mLightSensor = lightSensor;

+        mDozeHost = host;

+        mHandler = handler;

+

+        mDefaultDozeBrightness = context.getResources().getInteger(com.android.internal.R.integer.config_screenBrightnessDoze);

+        mSensorToBrightness = policy.screenBrightnessArray;

+        mSensorToScrimOpacity = policy.dimmingScrimArray;

+        mPolicy = policy;

}

@Override

@@ -94,6 +110,13 @@

}

@Override

+    public void clear() {

+        if (mPolicy != null) {

+            mPolicy.clear();

+        }

+    }

+

+    @Override

public void onSensorChanged(SensorEvent event) {

Trace.beginSection("DozeScreenBrightness.onSensorChanged" + event.values[0]);

try {

diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeSensors.java b/packages/SystemUI/src/com/android/systemui/doze/DozeSensors.java

index 91cde37..000e47a 100644

--- a/packages/SystemUI/src/com/android/systemui/doze/DozeSensors.java

+++ b/packages/SystemUI/src/com/android/systemui/doze/DozeSensors.java

@@ -133,6 +133,12 @@

return null;

}

+    public void clear() {

+        if (mProxSensor != null) {

+            mProxSensor.clear();

+        }

+    }

+

public void setListening(boolean listen) {

for (TriggerSensor s : mSensors) {

s.setListening(listen);

@@ -234,6 +240,12 @@

updateRegistered();

}

+        public void clear() {

+            if (mPolicy != null) {

+                mPolicy.clear();

+            }

+        }

+

private void updateRegistered() {

setRegistered(mRequested && !mCooldownTimer.isScheduled());

}

diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeService.java b/packages/SystemUI/src/com/android/systemui/doze/DozeService.java

index 98b1106..b147f97 100644

--- a/packages/SystemUI/src/com/android/systemui/doze/DozeService.java

+++ b/packages/SystemUI/src/com/android/systemui/doze/DozeService.java

@@ -57,6 +57,16 @@

mDozeMachine = new DozeFactory().assembleMachine(this);

}

+    /** {@inheritDoc} */

+    @Override

+    public void onDestroy() {

+        Log.d(TAG, "onDestroy() being called when DreamController stop this service");

+        if (mDozeMachine != null) {

+            mDozeMachine.clear();

+        }

+        super.onDestroy();

+    }

+

@Override

public void onPluginConnected(DozeServicePlugin plugin, Context pluginContext) {

mDozePlugin = plugin;

diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java b/packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java

index f7a258a..ea6ae4d 100644

--- a/packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java

+++ b/packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java

@@ -212,6 +212,13 @@

}

}

+    @Override

+    public void clear() {

+        if (mDozeSensors != null) {

+            mDozeSensors.clear();

+        }

+    }

+

private void checkTriggersAtInit() {

if (mUiModeManager.getCurrentModeType() == Configuration.UI_MODE_TYPE_CAR

|| mDozeHost.isPowerSaveActive()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值