From d44713a63d51ba7f186c775c2a32f3c2ce018037 Mon Sep 17 00:00:00 2001 From: Dianne Hackborn Date: Mon, 30 Apr 2012 16:34:46 -0700 Subject: [PATCH] Fix issue #6234928: android.app.IntentReceiverLeaked: Activity com.android.internal.app.ChooserActivity has leaked IntentReceiver Change-Id: I02488931d8c02ecbe0c6fc2f7ce708a9dc406f67 --- .../com/android/internal/app/ResolverActivity.java | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/core/java/com/android/internal/app/ResolverActivity.java b/core/java/com/android/internal/app/ResolverActivity.java index 5862d3e08b5ec..51bbdf19b2dd8 100644 --- a/core/java/com/android/internal/app/ResolverActivity.java +++ b/core/java/com/android/internal/app/ResolverActivity.java @@ -63,6 +63,7 @@ public class ResolverActivity extends AlertActivity implements private TextView mClearDefaultHint; private PackageManager mPm; + private boolean mRegistered; private final PackageMonitor mPackageMonitor = new PackageMonitor() { @Override public void onSomePackagesChanged() { mAdapter.handlePackagesChanged(); @@ -100,6 +101,7 @@ public class ResolverActivity extends AlertActivity implements ap.mOnClickListener = this; mPackageMonitor.register(this, getMainLooper(), false); + mRegistered = true; if (alwaysUseOption) { LayoutInflater inflater = (LayoutInflater) getSystemService( @@ -118,6 +120,8 @@ public class ResolverActivity extends AlertActivity implements ap.mAdapter = mAdapter; } else if (count == 1) { startActivity(mAdapter.intentForPosition(0)); + mPackageMonitor.unregister(); + mRegistered = false; finish(); return; } else { @@ -135,14 +139,20 @@ public class ResolverActivity extends AlertActivity implements @Override protected void onRestart() { super.onRestart(); - mPackageMonitor.register(this, getMainLooper(), false); + if (!mRegistered) { + mPackageMonitor.register(this, getMainLooper(), false); + mRegistered = true; + } mAdapter.handlePackagesChanged(); } @Override protected void onStop() { super.onStop(); - mPackageMonitor.unregister(); + if (mRegistered) { + mPackageMonitor.unregister(); + mRegistered = false; + } } public void onClick(DialogInterface dialog, int which) {