Merge "Fix SearchUiService memory leak by removing DeathRecipient from CallbackWrapper" into tm-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
ea56fc681f
@@ -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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user