diff options
author | Makoto Onuki <omakoto@google.com> | 2010-04-29 11:26:20 -0700 |
---|---|---|
committer | Makoto Onuki <omakoto@google.com> | 2010-04-29 11:36:48 -0700 |
commit | 2589716964f99fd0ee29a9b295584c277e23f34f (patch) | |
tree | cccba9c2fd6133390494f051583aeb93cc93b3bb /core/java/android/database/sqlite/SQLiteCursor.java | |
parent | 286fbce557fa5b027ffb3c5a5b562bfc5a3b4748 (diff) | |
download | frameworks_base-2589716964f99fd0ee29a9b295584c277e23f34f.zip frameworks_base-2589716964f99fd0ee29a9b295584c277e23f34f.tar.gz frameworks_base-2589716964f99fd0ee29a9b295584c277e23f34f.tar.bz2 |
Make RequeryOnUiThreadException warning less spamy
- Moved the thread check from AbstractCursor to SQLiteCursor.
- Show warning only once per database
Bug 2633883
Change-Id: I915bfba8715a469c45fb68ba1282231279f2a50c
Diffstat (limited to 'core/java/android/database/sqlite/SQLiteCursor.java')
-rw-r--r-- | core/java/android/database/sqlite/SQLiteCursor.java | 28 |
1 files changed, 27 insertions, 1 deletions
diff --git a/core/java/android/database/sqlite/SQLiteCursor.java b/core/java/android/database/sqlite/SQLiteCursor.java index 6e5b3e1..fea3438 100644 --- a/core/java/android/database/sqlite/SQLiteCursor.java +++ b/core/java/android/database/sqlite/SQLiteCursor.java @@ -16,12 +16,14 @@ package android.database.sqlite; +import android.app.ActivityThread; import android.database.AbstractWindowedCursor; import android.database.CursorWindow; import android.database.DataSetObserver; +import android.database.RequeryOnUiThreadException; import android.database.SQLException; - import android.os.Handler; +import android.os.Looper; import android.os.Message; import android.os.Process; import android.text.TextUtils; @@ -74,6 +76,11 @@ public class SQLiteCursor extends AbstractWindowedCursor { private int mCursorState = 0; private ReentrantLock mLock = null; private boolean mPendingData = false; + + /** + * Used by {@link #requery()} to remember for which database we've already shown the warning. + */ + private static final HashMap<String, Boolean> sAlreadyWarned = new HashMap<String, Boolean>(); /** * support for a cursor variant that doesn't always read all results @@ -503,11 +510,30 @@ public class SQLiteCursor extends AbstractWindowedCursor { mDriver.cursorClosed(); } + /** + * Show a warning against the use of requery() if called on the main thread. + * This warning is shown per database per process. + */ + private void warnIfUiThread() { + if (Looper.getMainLooper() == Looper.myLooper()) { + String databasePath = mDatabase.getPath(); + // We show the warning once per database in order not to spam logcat. + if (!sAlreadyWarned.containsKey(databasePath)) { + sAlreadyWarned.put(databasePath, true); + String packageName = ActivityThread.currentPackageName(); + Log.w(TAG, "should not attempt requery on main (UI) thread: app = " + + packageName == null ? "'unknown'" : packageName, + new RequeryOnUiThreadException(packageName)); + } + } + } + @Override public boolean requery() { if (isClosed()) { return false; } + warnIfUiThread(); long timeStart = 0; if (Config.LOGV) { timeStart = System.currentTimeMillis(); |