diff options
author | 2013-08-16 11:58:57 +0000 | |
---|---|---|
committer | 2013-08-16 11:58:57 +0000 | |
commit | c2f2d0d211fe4c765cda7a770004d061ff2b7711 (patch) | |
tree | 3f454173c6a41d8ea79d3df7a78d1661c23961b1 /java/src/com/android/inputmethod/latin/personalization/DynamicPredictionDictionaryBase.java | |
parent | e72c4e5fc7531f23f5806efed91aafe5d1ba2d1f (diff) | |
parent | 0d70bcc821c22f7001b66f4c7b83842661b8391e (diff) | |
download | latinime-c2f2d0d211fe4c765cda7a770004d061ff2b7711.tar.gz latinime-c2f2d0d211fe4c765cda7a770004d061ff2b7711.tar.xz latinime-c2f2d0d211fe4c765cda7a770004d061ff2b7711.zip |
Merge "Limit the number of waiting UpdateBinaryTask to at most 1."
Diffstat (limited to 'java/src/com/android/inputmethod/latin/personalization/DynamicPredictionDictionaryBase.java')
-rw-r--r-- | java/src/com/android/inputmethod/latin/personalization/DynamicPredictionDictionaryBase.java | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/java/src/com/android/inputmethod/latin/personalization/DynamicPredictionDictionaryBase.java b/java/src/com/android/inputmethod/latin/personalization/DynamicPredictionDictionaryBase.java index 065e00e4a..525d3cd11 100644 --- a/java/src/com/android/inputmethod/latin/personalization/DynamicPredictionDictionaryBase.java +++ b/java/src/com/android/inputmethod/latin/personalization/DynamicPredictionDictionaryBase.java @@ -43,6 +43,7 @@ import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.util.ArrayList; +import java.util.concurrent.atomic.AtomicReference; import java.util.concurrent.locks.ReentrantLock; /** @@ -75,6 +76,8 @@ public abstract class DynamicPredictionDictionaryBase extends ExpandableDictiona private final ArrayList<PersonalizationDictionaryUpdateSession> mSessions = CollectionUtils.newArrayList(); + private final AtomicReference<AsyncTask<Void, Void, Void>> mWaitingTask; + // Should always be false except when we use this class for test @UsedForTesting boolean mIsTest = false; @@ -83,6 +86,7 @@ public abstract class DynamicPredictionDictionaryBase extends ExpandableDictiona super(context, dictionaryType); mLocale = locale; mPrefs = sp; + mWaitingTask = new AtomicReference<AsyncTask<Void, Void, Void>>(); if (mLocale != null && mLocale.length() > 1) { loadDictionary(); } @@ -174,7 +178,11 @@ public abstract class DynamicPredictionDictionaryBase extends ExpandableDictiona */ private void flushPendingWrites() { // Create a background thread to write the pending entries - new UpdateBinaryTask(mBigramList, mLocale, this, mPrefs, getContext()).execute(); + final AsyncTask<Void, Void, Void> old = mWaitingTask.getAndSet(new UpdateBinaryTask( + mBigramList, mLocale, this, mPrefs, getContext()).execute()); + if (old != null) { + old.cancel(false); + } } @Override @@ -287,6 +295,7 @@ public abstract class DynamicPredictionDictionaryBase extends ExpandableDictiona @Override protected Void doInBackground(final Void... v) { + if (isCancelled()) return null; if (mDynamicPredictionDictionary.mIsTest) { // If mIsTest == true, wait until the lock is released. mDynamicPredictionDictionary.mBigramListLock.lock(); @@ -306,6 +315,9 @@ public abstract class DynamicPredictionDictionaryBase extends ExpandableDictiona } private void doWriteTaskLocked() { + if (isCancelled()) return; + mDynamicPredictionDictionary.mWaitingTask.compareAndSet(this, null); + if (DBG_STRESS_TEST) { try { Log.w(TAG, "Start stress in closing: " + mLocale); |