diff options
author | Martijn Coenen <maco@google.com> | 2011-09-02 12:50:27 -0700 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2011-09-02 12:50:27 -0700 |
commit | 0c8d57d124d917721890b0aa4a152f9c9c7d317f (patch) | |
tree | 1e866eba8f2b8c28b2b0468540548713ec0cdbc8 /core | |
parent | 5afd2bd02ae44d5a38f9e560047723ddab176405 (diff) | |
parent | 3433a8ae5abf7c518277e2e00c141e1dec83600c (diff) | |
download | frameworks_base-0c8d57d124d917721890b0aa4a152f9c9c7d317f.zip frameworks_base-0c8d57d124d917721890b0aa4a152f9c9c7d317f.tar.gz frameworks_base-0c8d57d124d917721890b0aa4a152f9c9c7d317f.tar.bz2 |
Merge "Fix Activity ref-leak in NFC dispatch API."
Diffstat (limited to 'core')
-rw-r--r-- | core/java/android/nfc/NfcActivityManager.java | 14 | ||||
-rw-r--r-- | core/java/android/nfc/NfcFragment.java | 10 |
2 files changed, 21 insertions, 3 deletions
diff --git a/core/java/android/nfc/NfcActivityManager.java b/core/java/android/nfc/NfcActivityManager.java index 3cc6820..da878d4 100644 --- a/core/java/android/nfc/NfcActivityManager.java +++ b/core/java/android/nfc/NfcActivityManager.java @@ -20,7 +20,7 @@ import android.app.Activity; import android.os.RemoteException; import android.util.Log; -import java.util.HashMap; +import java.util.WeakHashMap; /** * Manages NFC API's that are coupled to the life-cycle of an Activity. @@ -38,7 +38,7 @@ public final class NfcActivityManager extends INdefPushCallback.Stub { static final Boolean DBG = false; final NfcAdapter mAdapter; - final HashMap<Activity, NfcActivityState> mNfcState; // contents protected by this + final WeakHashMap<Activity, NfcActivityState> mNfcState; // contents protected by this final NfcEvent mDefaultEvent; // can re-use one NfcEvent because it just contains adapter /** @@ -60,7 +60,7 @@ public final class NfcActivityManager extends INdefPushCallback.Stub { public NfcActivityManager(NfcAdapter adapter) { mAdapter = adapter; - mNfcState = new HashMap<Activity, NfcActivityState>(); + mNfcState = new WeakHashMap<Activity, NfcActivityState>(); mDefaultEvent = new NfcEvent(mAdapter); } @@ -88,6 +88,13 @@ public final class NfcActivityManager extends INdefPushCallback.Stub { } } + /** + * onDestroy hook from fragment attached to activity + */ + public void onDestroy(Activity activity) { + mNfcState.remove(activity); + } + public synchronized void setNdefPushMessage(Activity activity, NdefMessage message) { NfcActivityState state = getOrCreateState(activity, message != null); if (state == null || state.ndefMessage == message) { @@ -214,4 +221,5 @@ public final class NfcActivityManager extends INdefPushCallback.Stub { callback.onNdefPushComplete(mDefaultEvent); } } + } diff --git a/core/java/android/nfc/NfcFragment.java b/core/java/android/nfc/NfcFragment.java index c48859b..17278dc 100644 --- a/core/java/android/nfc/NfcFragment.java +++ b/core/java/android/nfc/NfcFragment.java @@ -80,4 +80,14 @@ public final class NfcFragment extends Fragment { sNfcActivityManager.onPause(getActivity()); } } + + @Override + public void onDestroy() { + super.onDestroy(); + if (sNfcActivityManager != null) { + sNfcActivityManager.onDestroy(getActivity()); + } + } + + } |