MainActivity渗漏最初这里必然ServiceConnection android.speech.SpeechRecognizer$Connection@414ee400 [英] MainActivity has leaked ServiceConnection android.speech.SpeechRecognizer$Connection@414ee400 that was originally bound here

查看:563
本文介绍了MainActivity渗漏最初这里必然ServiceConnection android.speech.SpeechRecognizer$Connection@414ee400的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在我的应用我识别用户说退出或关闭和应用程序应该关闭。 有了这个code

In my app I recognize the user saying "exit" or "close" and the app should close. With this code

SpeechRecognizer sr;
Map<String, Integer> 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<String, Integer>();
    dictionary.put("exit", EXIT);
    dictionary.put("close", EXIT);
}

@Override
public void onResults(Bundle results) {
    ArrayList<String> strList = results.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION);
    for (int i = 0; i < 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;
            }
        }
    }
} 

我得到这个运行时错误,语音识别后。

I get this runtime error, after the speech recognition.

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.<init>(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)

如果我试图摧毁SpeechRecognizer我得到另一个运行时错误,因为 SR 为空。

If I try to destroy the SpeechRecognizer I get another runtime error because sr is null.

@Override
public void onDestroy(){
    sr.destroy();
    super.onDestroy();
}

登录

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

我应该怎么办?

What should I do?

推荐答案

这个问题是最微不足道的曾经:我声明了 SpeechRecognizer 两次,一个是类另一个的onCreate()方法内。变量初始化只是在功能范围,所以外的函数 SR 总是空。

The problem was the most trivial ever: I declared the SpeechRecognizer two times, one for the class and another inside the onCreate() method. The variable was initialized only in the function scope, so outside the function sr was always null.

这篇关于MainActivity渗漏最初这里必然ServiceConnection android.speech.SpeechRecognizer$Connection@414ee400的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆