diff options
author | Svetoslav <svetoslavganov@google.com> | 2015-03-13 12:08:42 -0700 |
---|---|---|
committer | Svetoslav <svetoslavganov@google.com> | 2015-03-13 12:08:45 -0700 |
commit | d289e64a2d7c8efba78b9066b647ee321eba701a (patch) | |
tree | e92b1fde9d815726225e2b0c1c12eca89964f973 /packages/SettingsProvider/src/com/android | |
parent | c6ee744a90a4a84df93b6631ca7df8736ef320e1 (diff) | |
download | frameworks_base-d289e64a2d7c8efba78b9066b647ee321eba701a.zip frameworks_base-d289e64a2d7c8efba78b9066b647ee321eba701a.tar.gz frameworks_base-d289e64a2d7c8efba78b9066b647ee321eba701a.tar.bz2 |
Persist settings on a normal priority thread.
We were doing the work for persisting settings on a background
priority thread and as a result persistence was not happening
correctly on a low end devices. Now we use a worker thread with
normal priority.
bug:19611897
Change-Id: I378c6e324935f5e3def8b986bd48486bfab55265
Diffstat (limited to 'packages/SettingsProvider/src/com/android')
-rw-r--r-- | packages/SettingsProvider/src/com/android/providers/settings/SettingsState.java | 26 |
1 files changed, 23 insertions, 3 deletions
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsState.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsState.java index 3bf6828..84e66ff 100644 --- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsState.java +++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsState.java @@ -17,6 +17,7 @@ package com.android.providers.settings; import android.os.Handler; +import android.os.HandlerThread; import android.os.Message; import android.os.SystemClock; import android.provider.Settings; @@ -26,7 +27,6 @@ import android.util.AtomicFile; import android.util.Slog; import android.util.Xml; import com.android.internal.annotations.GuardedBy; -import com.android.internal.os.BackgroundThread; import libcore.io.IoUtils; import libcore.util.Objects; import org.xmlpull.v1.XmlPullParser; @@ -153,7 +153,7 @@ final class SettingsState { final int settingCount = mSettings.size(); for (int i = settingCount - 1; i >= 0; i--) { String name = mSettings.keyAt(i); - // Settings defined by use are never dropped. + // Settings defined by us are never dropped. if (Settings.System.PUBLIC_SETTINGS.contains(name) || Settings.System.PRIVATE_SETTINGS.contains(name)) { continue; @@ -494,7 +494,7 @@ final class SettingsState { public static final int MSG_PERSIST_SETTINGS = 1; public MyHandler() { - super(BackgroundThread.getHandler().getLooper()); + super(PersistThread.getInstance().getLooper()); } @Override @@ -574,4 +574,24 @@ final class SettingsState { return true; } } + + private static final class PersistThread extends HandlerThread { + private static final Object sLock = new Object(); + + private static PersistThread sInstance; + + private PersistThread() { + super("settings.persist"); + } + + public static PersistThread getInstance() { + synchronized (sLock) { + if (sInstance == null) { + sInstance = new PersistThread(); + sInstance.start(); + } + return sInstance; + } + } + } } |