diff options
author | 2019-05-07 02:31:07 +0000 | |
---|---|---|
committer | 2019-05-07 02:31:07 +0000 | |
commit | e66ca09dfed3130f4d0e09ed9f88f39d0788fec4 (patch) | |
tree | 8f6176162a1732e0bb575a861ba2fe32b4188594 | |
parent | a7e0e5d82a49ff70253e494a6b4576640fc21380 (diff) | |
parent | dd4e7318e606f0af3b2091ddb556a4cef3ad67c0 (diff) |
Merge "Create a separate HandlerThread to use for I/O operations" into qt-dev
-rw-r--r-- | src/com/android/documentsui/archives/ReadableArchive.java | 25 |
1 files changed, 18 insertions, 7 deletions
diff --git a/src/com/android/documentsui/archives/ReadableArchive.java b/src/com/android/documentsui/archives/ReadableArchive.java index 7c6e67294..302f582f5 100644 --- a/src/com/android/documentsui/archives/ReadableArchive.java +++ b/src/com/android/documentsui/archives/ReadableArchive.java @@ -17,6 +17,7 @@ package com.android.documentsui.archives; import static android.os.ParcelFileDescriptor.MODE_READ_ONLY; + import static com.android.documentsui.base.SharedMinimal.DEBUG; import android.content.Context; @@ -28,7 +29,7 @@ import android.os.Bundle; import android.os.CancellationSignal; import android.os.FileUtils; import android.os.Handler; -import android.os.Looper; +import android.os.HandlerThread; import android.os.ParcelFileDescriptor; import android.os.storage.StorageManager; import android.provider.DocumentsContract; @@ -38,6 +39,10 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.core.util.Preconditions; +import org.apache.commons.compress.archivers.ArchiveEntry; +import org.apache.commons.compress.archivers.ArchiveException; +import org.apache.commons.compress.compressors.CompressorException; +import org.apache.commons.compress.utils.IOUtils; import java.io.File; import java.io.FileNotFoundException; @@ -50,11 +55,6 @@ import java.util.Enumeration; import java.util.List; import java.util.Stack; -import org.apache.commons.compress.archivers.ArchiveEntry; -import org.apache.commons.compress.archivers.ArchiveException; -import org.apache.commons.compress.compressors.CompressorException; -import org.apache.commons.compress.utils.IOUtils; - /** * Provides basic implementation for extracting and accessing * files within archives exposed by a document provider. @@ -67,6 +67,8 @@ public class ReadableArchive extends Archive { private final StorageManager mStorageManager; private final ArchiveHandle mArchiveHandle; private final ParcelFileDescriptor mParcelFileDescriptor; + private final Handler mHandler; + private HandlerThread mHandlerThread; private ReadableArchive( Context context, @@ -170,6 +172,10 @@ public class ReadableArchive extends Archive { parentList.add(entry); } + + mHandlerThread = new HandlerThread(TAG); + mHandlerThread.start(); + mHandler = new Handler(mHandlerThread.getLooper()); } /** @@ -270,7 +276,7 @@ public class ReadableArchive extends Archive { try { return mStorageManager.openProxyFileDescriptor(MODE_READ_ONLY, - new Proxy(mArchiveHandle, entry), new Handler(Looper.getMainLooper())); + new Proxy(mArchiveHandle, entry), mHandler); } catch (IOException e) { throw new IllegalStateException(e); } catch (ArchiveException e) { @@ -353,5 +359,10 @@ public class ReadableArchive extends Archive { */ IOUtils.closeQuietly(mParcelFileDescriptor); } + + if (mHandlerThread != null) { + mHandlerThread.quitSafely(); + mHandlerThread = null; + } } } |