From fab65bd5db022dd6ed38d82c4d65a642adb316c9 Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Thu, 13 Dec 2012 00:28:49 +0000 Subject: [PATCH] eSpeakActivity: use a weak reference in the Handler to avoid memory leaks --- .gitignore | 6 +++--- .../eyesfree/espeak/eSpeakActivity.java | 17 +++++++++++++---- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/.gitignore b/.gitignore index ffbeee76..5de2dae5 100644 --- a/.gitignore +++ b/.gitignore @@ -46,9 +46,9 @@ libespeak.so* # programs platforms/*/espeak-phoneme-data -espeak -espeakedit -speak +src/espeak +src/espeakedit +src/speak # Linux/Source distribution files diff --git a/src/com/googlecode/eyesfree/espeak/eSpeakActivity.java b/src/com/googlecode/eyesfree/espeak/eSpeakActivity.java index 81665f37..7692232c 100644 --- a/src/com/googlecode/eyesfree/espeak/eSpeakActivity.java +++ b/src/com/googlecode/eyesfree/espeak/eSpeakActivity.java @@ -30,6 +30,7 @@ import android.speech.tts.TextToSpeech; import android.view.View; import android.widget.TextView; +import java.lang.ref.WeakReference; import java.util.ArrayList; public class eSpeakActivity extends Activity { @@ -277,16 +278,24 @@ public class eSpeakActivity extends Activity { } }; - private final Handler mHandler = new Handler() { - @Override + private static class EspeakHandler extends Handler { + private WeakReference mActivity; + + public EspeakHandler(eSpeakActivity activity) + { + mActivity = new WeakReference(activity); + } + + @Override public void handleMessage(Message msg) { switch (msg.what) { case TTS_INITIALIZED: - onInitialized(msg.arg1); + mActivity.get().onInitialized(msg.arg1); break; } } - }; + } + private final Handler mHandler = new EspeakHandler(this); private final View.OnClickListener mOnClickListener = new View.OnClickListener() { @Override