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
+}