Avoid to hold a strong reference to Context object
We only use parts of Context in the Content Capture manager and main session, we don't need to cache context object which will cause some memory issues. This change will extract the necessary information to save it, instead of caching the entire context object. Bug: 256247718 Fixes: 239192932 Test: atest CtsContentCaptureServiceTestCases Change-Id: Id7b5e8617c521f31879199b0f2c7e18204bb7526
This commit is contained in:
@@ -378,7 +378,7 @@ public final class ContentCaptureManager {
|
||||
private final Object mLock = new Object();
|
||||
|
||||
@NonNull
|
||||
private final Context mContext;
|
||||
private final StrippedContext mContext;
|
||||
|
||||
@NonNull
|
||||
private final IContentCaptureManager mService;
|
||||
@@ -413,10 +413,38 @@ public final class ContentCaptureManager {
|
||||
ComponentName contentCaptureClientGetComponentName();
|
||||
}
|
||||
|
||||
/** @hide */
|
||||
static class StrippedContext {
|
||||
final String mPackageName;
|
||||
final String mContext;
|
||||
final @UserIdInt int mUserId;
|
||||
|
||||
private StrippedContext(Context context) {
|
||||
mPackageName = context.getPackageName();
|
||||
mContext = context.toString();
|
||||
mUserId = context.getUserId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return mContext;
|
||||
}
|
||||
|
||||
public String getPackageName() {
|
||||
return mPackageName;
|
||||
}
|
||||
|
||||
@UserIdInt
|
||||
public int getUserId() {
|
||||
return mUserId;
|
||||
}
|
||||
}
|
||||
|
||||
/** @hide */
|
||||
public ContentCaptureManager(@NonNull Context context,
|
||||
@NonNull IContentCaptureManager service, @NonNull ContentCaptureOptions options) {
|
||||
mContext = Objects.requireNonNull(context, "context cannot be null");
|
||||
Objects.requireNonNull(context, "context cannot be null");
|
||||
mContext = new StrippedContext(context);
|
||||
mService = Objects.requireNonNull(service, "service cannot be null");
|
||||
mOptions = Objects.requireNonNull(options, "options cannot be null");
|
||||
|
||||
|
||||
@@ -36,7 +36,6 @@ import android.annotation.NonNull;
|
||||
import android.annotation.Nullable;
|
||||
import android.annotation.UiThread;
|
||||
import android.content.ComponentName;
|
||||
import android.content.Context;
|
||||
import android.content.pm.ParceledListSlice;
|
||||
import android.graphics.Insets;
|
||||
import android.graphics.Rect;
|
||||
@@ -103,7 +102,7 @@ public final class MainContentCaptureSession extends ContentCaptureSession {
|
||||
private final AtomicBoolean mDisabled = new AtomicBoolean(false);
|
||||
|
||||
@NonNull
|
||||
private final Context mContext;
|
||||
private final ContentCaptureManager.StrippedContext mContext;
|
||||
|
||||
@NonNull
|
||||
private final ContentCaptureManager mManager;
|
||||
@@ -197,7 +196,7 @@ public final class MainContentCaptureSession extends ContentCaptureSession {
|
||||
}
|
||||
}
|
||||
|
||||
protected MainContentCaptureSession(@NonNull Context context,
|
||||
protected MainContentCaptureSession(@NonNull ContentCaptureManager.StrippedContext context,
|
||||
@NonNull ContentCaptureManager manager, @NonNull Handler handler,
|
||||
@NonNull IContentCaptureManager systemServerInterface) {
|
||||
mContext = context;
|
||||
|
||||
Reference in New Issue
Block a user