mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-02-15 07:28:30 +00:00
Stop content provider handler threads on release.
This commit is contained in:
@@ -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() {
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user