Merge "Fix SearchUiService memory leak by removing DeathRecipient from CallbackWrapper" into tm-dev

This commit is contained in:
TreeHugger Robot
2022-05-19 06:40:52 +00:00
committed by Android (Google) Code Review

View File

@@ -20,7 +20,6 @@ import static com.android.internal.util.function.pooled.PooledLambda.obtainMessa
import android.annotation.CallSuper; import android.annotation.CallSuper;
import android.annotation.MainThread; import android.annotation.MainThread;
import android.annotation.NonNull; import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi; import android.annotation.SystemApi;
import android.app.Service; import android.app.Service;
import android.app.search.ISearchCallback; import android.app.search.ISearchCallback;
@@ -88,7 +87,7 @@ public abstract class SearchUiService extends Service {
mHandler.sendMessage( mHandler.sendMessage(
obtainMessage(SearchUiService::onQuery, obtainMessage(SearchUiService::onQuery,
SearchUiService.this, sessionId, input, SearchUiService.this, sessionId, input,
new CallbackWrapper(callback, null))); new CallbackWrapper(callback)));
} }
@Override @Override
@@ -173,21 +172,12 @@ public abstract class SearchUiService extends Service {
@MainThread @MainThread
public abstract void onDestroy(@NonNull SearchSessionId sessionId); public abstract void onDestroy(@NonNull SearchSessionId sessionId);
private static final class CallbackWrapper implements Consumer<List<SearchTarget>>, private static final class CallbackWrapper implements Consumer<List<SearchTarget>> {
IBinder.DeathRecipient {
private ISearchCallback mCallback; private ISearchCallback mCallback;
private final Consumer<CallbackWrapper> mOnBinderDied;
CallbackWrapper(ISearchCallback callback, CallbackWrapper(ISearchCallback callback) {
@Nullable Consumer<CallbackWrapper> onBinderDied) {
mCallback = callback; mCallback = callback;
mOnBinderDied = onBinderDied;
try {
mCallback.asBinder().linkToDeath(this, 0);
} catch (RemoteException e) {
Slog.e(TAG, "Failed to link to death: " + e);
}
} }
@Override @Override
@@ -203,14 +193,5 @@ public abstract class SearchUiService extends Service {
Slog.e(TAG, "Error sending result:" + e); Slog.e(TAG, "Error sending result:" + e);
} }
} }
@Override
public void binderDied() {
mCallback.asBinder().unlinkToDeath(this, 0);
mCallback = null;
if (mOnBinderDied != null) {
mOnBinderDied.accept(this);
}
}
} }
} }