From 7f8069b16fe9b18b9a048284b983c47eb628c789 Mon Sep 17 00:00:00 2001 From: Mathias Jeppsson Date: Fri, 3 Sep 2010 11:35:00 +0200 Subject: [PATCH] Memory leak in TextKeyListener. If a call to getPrefs is made after weak reference to content resolver is gone, a new observer will be created and registered at the resolver. At registration, the resolver will allocate ObserverEntry objects that will eventually fill the JNI global reference pool. There is no need to create and register a new observer if one is already registered. Change-Id: If8442b3370299980b73d4ea83757c5eae6a85408 --- core/java/android/text/method/TextKeyListener.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/core/java/android/text/method/TextKeyListener.java b/core/java/android/text/method/TextKeyListener.java index 5be2a4866c4f8..0c12c55b012b4 100644 --- a/core/java/android/text/method/TextKeyListener.java +++ b/core/java/android/text/method/TextKeyListener.java @@ -246,8 +246,11 @@ public class TextKeyListener extends BaseKeyListener implements SpanWatcher { private void initPrefs(Context context) { final ContentResolver contentResolver = context.getContentResolver(); mResolver = new WeakReference(contentResolver); - mObserver = new SettingsObserver(); - contentResolver.registerContentObserver(Settings.System.CONTENT_URI, true, mObserver); + + if (mObserver == null) { + mObserver = new SettingsObserver(); + contentResolver.registerContentObserver(Settings.System.CONTENT_URI, true, mObserver); + } updatePrefs(contentResolver); mPrefsInited = true;