Stop content provider handler threads on release.

This commit is contained in:
Clark
2023-07-25 12:43:39 -04:00
committed by Greyson Parrelli
parent d78e73bd6f
commit 4adc660705
2 changed files with 15 additions and 6 deletions

View File

@@ -15,6 +15,7 @@ import android.graphics.Bitmap
import android.net.Uri
import android.os.Build
import android.os.Handler
import android.os.HandlerThread
import android.os.MemoryFile
import android.os.ParcelFileDescriptor
import android.os.ProxyFileDescriptorCallback
@@ -180,7 +181,7 @@ class AvatarProvider : BaseContentProvider() {
val parcelFileDescriptor = storageManager.openProxyFileDescriptor(
ParcelFileDescriptor.MODE_READ_ONLY,
ProxyCallback(context!!.applicationContext, recipient),
ProxyCallback(context!!.applicationContext, recipient, handlerThread),
handler
)
@@ -206,7 +207,8 @@ class AvatarProvider : BaseContentProvider() {
@RequiresApi(26)
private class ProxyCallback(
private val context: Context,
private val recipient: Recipient
private val recipient: Recipient,
private val handlerThread: HandlerThread
) : ProxyFileDescriptorCallback() {
private var memoryFile: MemoryFile? = null
@@ -226,6 +228,7 @@ class AvatarProvider : BaseContentProvider() {
override fun onRelease() {
Log.i(TAG, "${recipient.id}:onRelease")
memoryFile = null
handlerThread.quitSafely()
}
private fun ensureResourceLoaded() {

View File

@@ -206,7 +206,7 @@ public final class PartProvider extends BaseContentProvider {
Handler handler = new Handler(thread.getLooper());
ParcelFileDescriptor parcelFileDescriptor = storageManager.openProxyFileDescriptor(ParcelFileDescriptor.MODE_READ_ONLY,
new ProxyCallback(SignalDatabase.attachments(), attachmentId),
new ProxyCallback(SignalDatabase.attachments(), attachmentId, thread),
handler);
Log.i(TAG, attachmentId + ":createdProxy");
@@ -218,10 +218,12 @@ public final class PartProvider extends BaseContentProvider {
private AttachmentTable attachments;
private AttachmentId attachmentId;
private HandlerThread handlerThread;
public ProxyCallback(@NonNull AttachmentTable attachments, @NonNull AttachmentId attachmentId) {
this.attachments = attachments;
this.attachmentId = attachmentId;
public ProxyCallback(@NonNull AttachmentTable attachments, @NonNull AttachmentId attachmentId, @NonNull HandlerThread handlerThread) {
this.attachments = attachments;
this.attachmentId = attachmentId;
this.handlerThread = handlerThread;
}
@Override
@@ -270,6 +272,10 @@ public final class PartProvider extends BaseContentProvider {
attachments = null;
attachmentId = null;
if (handlerThread != null) {
handlerThread.quitSafely();
handlerThread = null;
}
}
}
}