Remove thread when onDestroyView is called on BrowserBookmarksPage
Change-Id: Ied0293b7f1dbfe16c3517dbb9e2b19c8030d31a1
diff --git a/src/com/android/browser/BrowserBookmarksPage.java b/src/com/android/browser/BrowserBookmarksPage.java
index e799662..82109e9 100644
--- a/src/com/android/browser/BrowserBookmarksPage.java
+++ b/src/com/android/browser/BrowserBookmarksPage.java
@@ -450,6 +450,7 @@
LoaderManager lm = getLoaderManager();
lm.destroyLoader(LOADER_ACCOUNTS);
for (int id : mBookmarkAdapters.keySet()) {
+ mBookmarkAdapters.get(id).quitThread();
lm.destroyLoader(id);
}
mBookmarkAdapters.clear();
diff --git a/src/com/android/browser/util/ThreadedCursorAdapter.java b/src/com/android/browser/util/ThreadedCursorAdapter.java
index f07a375..23dd307 100644
--- a/src/com/android/browser/util/ThreadedCursorAdapter.java
+++ b/src/com/android/browser/util/ThreadedCursorAdapter.java
@@ -46,6 +46,7 @@
private int mSize;
private boolean mHasCursor;
private long mGeneration;
+ private HandlerThread mThread;
private class LoadContainer {
WeakReference<View> view;
@@ -89,10 +90,10 @@
};
mSize = mCursorAdapter.getCount();
- HandlerThread thread = new HandlerThread("threaded_adapter_" + this,
+ mThread = new HandlerThread("threaded_adapter_" + this,
Process.THREAD_PRIORITY_BACKGROUND);
- thread.start();
- mLoadHandler = new Handler(thread.getLooper()) {
+ mThread.start();
+ mLoadHandler = new Handler(mThread.getLooper()) {
@SuppressWarnings("unchecked")
@Override
public void handleMessage(Message msg) {
@@ -204,9 +205,17 @@
}
}
+ public void quitThread() {
+ if (mThread != null) {
+ HandlerThread thread = mThread;
+ mThread = null;
+ thread.quitSafely();
+ }
+ }
+
public abstract View newView(Context context, ViewGroup parent);
public abstract void bindView(View view, T object);
public abstract T getRowObject(Cursor c, T recycleObject);
public abstract T getLoadingObject();
protected abstract long getItemId(Cursor c);
-}
\ No newline at end of file
+}