目录
正文
zram writeback开关
将settings的值存储到属性中,然后再执行zram writeback的schedule,正常情况下属性值是1和0这两种,如果没有值的话,则表示没有打开。
frameworks/base/core/java/android/provider/Settings.java
public static final String ZRAM_ENABLED =
"zram_enabled";
frameworks/base/services/core/java/com/android/server/StorageManagerService.java
/* Read during boot to decide whether to enable zram when available */
private static final String ZRAM_ENABLED_PROPERTY =
"persist.sys.zram_enabled";
// storage service起来之后,首先执行的动作
private void handleSystemReady() {
// 监听Settings的ZRAM_ENABLED,如果发生变动,则触发refreshZramSettings()
mContext.getContentResolver().registerContentObserver(
Settings.Global.getUriFor(Settings.Global.ZRAM_ENABLED),
false /*notifyForDescendants*/,
new ContentObserver(null /* current thread */) {
@Override
public void onChange(boolean selfChange) {
refreshZramSettings();
}
});
refreshZramSettings();
// persist.sys.zram_enabled 判断是否为非0,并且config_zramWriteback设置为true
// 则进行writeback的job的调度
String zramPropValue = SystemProperties.get(ZRAM_ENABLED_PROPERTY);
if (!zramPropValue.equals("0")
&& mContext.getResources().getBoolean(
com.android.internal.R.bool.config_zramWriteback)) {
ZramWriteback.scheduleZramWriteback(mContext);
}
}
private void refreshZramSettings() {
String propertyValue = SystemProperties.get(ZRAM_ENABLED_PROPERTY);
if ("".equals(propertyValue)) {
return; // System doesn't have zram toggling support
}
String desiredPropertyValue =
Settings.Global.getInt(mCon

本文详细介绍了Android系统中zramwriteback的开关控制、JobScheduler的API使用以及ZramWriteback的实现过程。zramwriteback通过监控Settings中的ZRAM_ENABLED属性并根据系统属性来决定是否开启。JobScheduler在接收到启动任务请求时,会通过onStartJob方法执行工作,如果任务耗时,需手动调用jobFinished方法。ZramWriteback的实现包括标记页面为idle和执行writeback操作,以及后续的调度策略。整个流程确保了系统的高效存储管理。
最低0.47元/天 解锁文章
5067

被折叠的 条评论
为什么被折叠?



