Create a handler thread
Todd Kennedy [Fri, 19 Jun 2015 21:47:45 +0000 (14:47 -0700)]
The onCreate() method [where we initialize the handler] runs on the
main thread. This means the ParcelFileDescriptor also runs tasks
involving disk access on the main thread. We need to create a
separate thread to run the Content Provider's handler.

Bug: 19718299
Change-Id: Ia3661fafd3442ad6260f04253ba24ddf83b176b2

src/com/android/providers/downloads/DownloadProvider.java

index b19da70..2087c22 100644 (file)
@@ -36,6 +36,7 @@ import android.net.Uri;
 import android.os.Binder;
 import android.os.Environment;
 import android.os.Handler;
+import android.os.HandlerThread;
 import android.os.ParcelFileDescriptor;
 import android.os.ParcelFileDescriptor.OnCloseListener;
 import android.os.Process;
@@ -441,7 +442,10 @@ public final class DownloadProvider extends ContentProvider {
             mSystemFacade = new RealSystemFacade(getContext());
         }
 
-        mHandler = new Handler();
+        HandlerThread handlerThread =
+                new HandlerThread("DownloadProvider handler", Process.THREAD_PRIORITY_BACKGROUND);
+        handlerThread.start();
+        mHandler = new Handler(handlerThread.getLooper());
 
         mOpenHelper = new DatabaseHelper(getContext());
         // Initialize the system uid