title: MainActivity has leaked ServiceConnection android.speech.SpeechRecognizer$Connection@414ee400 that was originally bound here
body: <p>In my app I recognize the user saying "exit" or "close" and the app should close.
  With this code</p>
  
  <pre><code>SpeechRecognizer sr;
  Map&lt;String, Integer&gt; dictionary;
  private static final int EXIT = 1;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      populateDictionary();
      SpeechRecognizer sr = SpeechRecognizer.createSpeechRecognizer(this);
      sr.setRecognitionListener(this);
      Intent voiceIntent = RecognizerIntent.getVoiceDetailsIntent(getApplicationContext());
      sr.startListening(voiceIntent);
  }
  
  @Override
  public boolean onCreateOptionsMenu(Menu menu) {
      // Inflate the menu; this adds items to the action bar if it is present.
      getMenuInflater().inflate(R.menu.main, menu);
      return true;
  }
  
  private void populateDictionary() {
      dictionary = new HashMap&lt;String, Integer&gt;();
      dictionary.put("exit", EXIT);
      dictionary.put("close", EXIT);
  }
  
  @Override
  public void onResults(Bundle results) {
      ArrayList&lt;String&gt; strList = results.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION);
      for (int i = 0; i &lt; strList.size();i++ ) {
          String sentence = strList.get(i).toLowerCase(Locale.getDefault());
          Integer operation = dictionary.get(sentence);
          if(operation != null){
              switch(operation){
                  case EXIT:{
                      this.finish();
                  };break;
              }
          }
      }
  } 
  </code></pre>
  
  <p>I get this runtime error, after the speech recognition.</p>
  
  <pre><code>11-12 15:38:05.351: E/Trace(14934): error opening trace file: No such file or directory (2)
  11-12 15:38:05.511: D/libEGL(14934): loaded /system/lib/egl/libEGL_mali.so
  11-12 15:38:05.521: D/libEGL(14934): loaded /system/lib/egl/libGLESv1_CM_mali.so
  11-12 15:38:05.521: D/libEGL(14934): loaded /system/lib/egl/libGLESv2_mali.so
  11-12 15:38:05.541: D/OpenGLRenderer(14934): Enabling debug mode 0
  11-12 15:38:08.884: E/ActivityThread(14934): Activity com.example.voicetest01.MainActivity has leaked ServiceConnection android.speech.SpeechRecognizer$Connection@414f0e40 that was originally bound here
  11-12 15:38:08.884: E/ActivityThread(14934): android.app.ServiceConnectionLeaked: Activity com.example.voicetest01.MainActivity has leaked ServiceConnection android.speech.SpeechRecognizer$Connection@414f0e40 that was originally bound here
  11-12 15:38:08.884: E/ActivityThread(14934):    at android.app.LoadedApk$ServiceDispatcher.&lt;init&gt;(LoadedApk.java:965)
  11-12 15:38:08.884: E/ActivityThread(14934):    at android.app.LoadedApk.getServiceDispatcher(LoadedApk.java:859)
  11-12 15:38:08.884: E/ActivityThread(14934):    at android.app.ContextImpl.bindService(ContextImpl.java:1214)
  11-12 15:38:08.884: E/ActivityThread(14934):    at android.app.ContextImpl.bindService(ContextImpl.java:1206)
  11-12 15:38:08.884: E/ActivityThread(14934):    at android.content.ContextWrapper.bindService(ContextWrapper.java:394)
  11-12 15:38:08.884: E/ActivityThread(14934):    at android.speech.SpeechRecognizer.startListening(SpeechRecognizer.java:281)
  11-12 15:38:08.884: E/ActivityThread(14934):    at com.example.voicetest01.MainActivity.onCreate(MainActivity.java:32)
  11-12 15:38:08.884: E/ActivityThread(14934):    at android.app.Activity.performCreate(Activity.java:5008)
  11-12 15:38:08.884: E/ActivityThread(14934):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
  11-12 15:38:08.884: E/ActivityThread(14934):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2027)
  11-12 15:38:08.884: E/ActivityThread(14934):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2088)
  11-12 15:38:08.884: E/ActivityThread(14934):    at android.app.ActivityThread.access$600(ActivityThread.java:134)
  11-12 15:38:08.884: E/ActivityThread(14934):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1199)
  11-12 15:38:08.884: E/ActivityThread(14934):    at android.os.Handler.dispatchMessage(Handler.java:99)
  11-12 15:38:08.884: E/ActivityThread(14934):    at android.os.Looper.loop(Looper.java:137)
  11-12 15:38:08.884: E/ActivityThread(14934):    at android.app.ActivityThread.main(ActivityThread.java:4744)
  11-12 15:38:08.884: E/ActivityThread(14934):    at java.lang.reflect.Method.invokeNative(Native Method)
  11-12 15:38:08.884: E/ActivityThread(14934):    at java.lang.reflect.Method.invoke(Method.java:511)
  11-12 15:38:08.884: E/ActivityThread(14934):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
  11-12 15:38:08.884: E/ActivityThread(14934):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
  11-12 15:38:08.884: E/ActivityThread(14934):    at dalvik.system.NativeStart.main(Native Method)
  </code></pre>
  
  <p>If I try to destroy the SpeechRecognizer I get another runtime error because <code>sr</code> is null.</p>
  
  <pre><code>@Override
  public void onDestroy(){
      sr.destroy();
      super.onDestroy();
  }
  </code></pre>
  
  <p>Log</p>
  
  <pre><code>11-12 15:29:24.383: E/Trace(13724): error opening trace file: No such file or directory (2)
  11-12 15:29:24.633: D/libEGL(13724): loaded /system/lib/egl/libEGL_mali.so
  11-12 15:29:24.633: D/libEGL(13724): loaded /system/lib/egl/libGLESv1_CM_mali.so
  11-12 15:29:24.643: D/libEGL(13724): loaded /system/lib/egl/libGLESv2_mali.so
  11-12 15:29:24.673: D/OpenGLRenderer(13724): Enabling debug mode 0
  11-12 15:29:29.047: D/AndroidRuntime(13724): Shutting down VM
  11-12 15:29:29.047: W/dalvikvm(13724): threadid=1: thread exiting with uncaught exception (group=0x40ccf318)
  11-12 15:29:29.047: E/AndroidRuntime(13724): FATAL EXCEPTION: main
  11-12 15:29:29.047: E/AndroidRuntime(13724): java.lang.NullPointerException
  11-12 15:29:29.047: E/AndroidRuntime(13724):    at com.example.voicetest01.MainActivity.onResults(MainActivity.java:77)
  11-12 15:29:29.047: E/AndroidRuntime(13724):    at android.speech.SpeechRecognizer$InternalListener$1.handleMessage(SpeechRecognizer.java:442)
  11-12 15:29:29.047: E/AndroidRuntime(13724):    at android.os.Handler.dispatchMessage(Handler.java:99)
  11-12 15:29:29.047: E/AndroidRuntime(13724):    at android.os.Looper.loop(Looper.java:137)
  11-12 15:29:29.047: E/AndroidRuntime(13724):    at android.app.ActivityThread.main(ActivityThread.java:4744)
  11-12 15:29:29.047: E/AndroidRuntime(13724):    at java.lang.reflect.Method.invokeNative(Native Method)
  11-12 15:29:29.047: E/AndroidRuntime(13724):    at java.lang.reflect.Method.invoke(Method.java:511)
  11-12 15:29:29.047: E/AndroidRuntime(13724):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
  11-12 15:29:29.047: E/AndroidRuntime(13724):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
  11-12 15:29:29.047: E/AndroidRuntime(13724):    at dalvik.system.NativeStart.main(Native Method)
  11-12 15:29:31.500: I/Process(13724): Sending signal. PID: 13724 SIG: 9
  </code></pre>
  
  <p>What should I do?</p>