赞
踩
1.分析解析
android系统有earlysuspend和suspend两种休眠,earlysuspend是浅度睡眠,suspend是深度休眠。这个是由linux电源管理控制的,电源管理的接口是“/sys/power/state”和"/sys/power/wake_lock","/sys/power/wake_unlock",这个是linux是否休眠和是否进入深度休眠的关键点。只有wake_lock上锁了,linux系统就不会进入深度休眠。
2..问题解决
从上分析可知,只要linux保持有一个唤醒锁,系统就不会进入深度休眠。那么解决问题的思路是在linux启动的时候添加一个唤醒锁就行了。在init.rc文件里面添加一个初始化项:
echo "noSuspend" > /sys/power/wake_lock
1.路径frameworks/base/core/res/res/values/config.xml 添加以下内容:
<string-array translatable="false" name="low_memory_killer_tracker_whitelist" >
<item>"com.xxx.xxxdroid.tester"</item>
<item>"com.xxx.xxxdroid.tester.service"</item>
</string-array>
说明:将你要增加白名单的app包名添加为item
2.路径frameworks/base/core/res/res/values/symbols.xml 添加以下内容:
<java-symbol type="array" name="low_memory_killer_tracker_whitelist" />
3.路径/frameworks/base/services/core/java/com/android/server/am/OomAdjuster.java
修改如下:
- + private List<String> mLmKillerBypassPackages = new ArrayList<String>();
-
- + private String[] lmKillerTrackerWhitelist = Resources.getSystem().getStringArray(
- com.android.internal.R.array.low_memory_killer_tracker_whitelist);
- + private mLmKillerBypassPackages = Arrays.asList(lmKillerTrackerWhitelist);
-
- + private boolean isInWhitelist(ProcessRecord pr) {
- + String pkgName = pr.info.packageName;
- +
- + for (String token : mLmKillerBypassPackages) {
- + if (pkgName.startsWith(token)) {
- + return true;
- + }
- + }
- + return false;
- + }
-
-
-
- //在此方法内添加
- private final boolean applyOomAdjLocked(ProcessRecord app, boolean doingAll, long now,
- long nowElapsed) {
-
- 。。。
- if (app.curAdj != app.setAdj) {
- //这里替换为以下+号开头内容
- + boolean isAppWhiteProcess = false;
- + if( isInWhitelist(app) && (app.curAdj > ProcessList.PERSISTENT_SERVICE_ADJ))
- + isAppWhiteProcess = true;
- + if(isAppWhiteProcess){
- + Slog.d(TAG,"isAppWhiteProcess so not kill!");
- + ProcessList.setOomAdj(app.pid, app.uid, ProcessList.PERSISTENT_SERVICE_ADJ);
- + if (DEBUG_SWITCH || DEBUG_OOM_ADJ || mService.mCurOomAdjUid == app.info.uid) {
- + String msg = "Set " + app.pid + " " + app.processName + " adj "
- + + app.curAdj + ": " + app.adjType;
- + reportOomAdjMessageLocked(TAG_OOM_ADJ, msg);
- + }
- + app.setAdj = ProcessList.PERSISTENT_SERVICE_ADJ;
- + app.verifiedAdj = ProcessList.INVALID_ADJ;
- + }else{
- + ProcessList.setOomAdj(app.pid, app.uid, app.curAdj);
- + if (DEBUG_SWITCH || DEBUG_OOM_ADJ || mService.mCurOomAdjUid == app.info.uid) {
- + String msg = "Set " + app.pid + " " + app.processName + " adj "
- + + app.curAdj + ": " + app.adjType;
- + reportOomAdjMessageLocked(TAG_OOM_ADJ, msg);
- + }
- + app.setAdj = app.curAdj;
- + app.verifiedAdj = ProcessList.INVALID_ADJ;
- + }
- }
- }

赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。