Merge "Fix issue #6234928: android.app.IntentReceiverLeaked:" into jb-dev

This commit is contained in:
Dianne Hackborn
2012-04-30 18:29:20 -07:00
committed by Android (Google) Code Review

View File

@@ -63,6 +63,7 @@ public class ResolverActivity extends AlertActivity implements
private TextView mClearDefaultHint; private TextView mClearDefaultHint;
private PackageManager mPm; private PackageManager mPm;
private boolean mRegistered;
private final PackageMonitor mPackageMonitor = new PackageMonitor() { private final PackageMonitor mPackageMonitor = new PackageMonitor() {
@Override public void onSomePackagesChanged() { @Override public void onSomePackagesChanged() {
mAdapter.handlePackagesChanged(); mAdapter.handlePackagesChanged();
@@ -100,6 +101,7 @@ public class ResolverActivity extends AlertActivity implements
ap.mOnClickListener = this; ap.mOnClickListener = this;
mPackageMonitor.register(this, getMainLooper(), false); mPackageMonitor.register(this, getMainLooper(), false);
mRegistered = true;
if (alwaysUseOption) { if (alwaysUseOption) {
LayoutInflater inflater = (LayoutInflater) getSystemService( LayoutInflater inflater = (LayoutInflater) getSystemService(
@@ -118,6 +120,8 @@ public class ResolverActivity extends AlertActivity implements
ap.mAdapter = mAdapter; ap.mAdapter = mAdapter;
} else if (count == 1) { } else if (count == 1) {
startActivity(mAdapter.intentForPosition(0)); startActivity(mAdapter.intentForPosition(0));
mPackageMonitor.unregister();
mRegistered = false;
finish(); finish();
return; return;
} else { } else {
@@ -135,14 +139,20 @@ public class ResolverActivity extends AlertActivity implements
@Override @Override
protected void onRestart() { protected void onRestart() {
super.onRestart(); super.onRestart();
mPackageMonitor.register(this, getMainLooper(), false); if (!mRegistered) {
mPackageMonitor.register(this, getMainLooper(), false);
mRegistered = true;
}
mAdapter.handlePackagesChanged(); mAdapter.handlePackagesChanged();
} }
@Override @Override
protected void onStop() { protected void onStop() {
super.onStop(); super.onStop();
mPackageMonitor.unregister(); if (mRegistered) {
mPackageMonitor.unregister();
mRegistered = false;
}
} }
public void onClick(DialogInterface dialog, int which) { public void onClick(DialogInterface dialog, int which) {