2013-03-21 1 views
2

Я пытаюсь создать приложение, используя текст в речь. Всякий раз, когда я перехожу от активности Text_entry к активности CombChange и обратно, я получаю эти служебные соединения с пропущенными ошибками в log cat (ниже).android: TextToSpeech утечка сервисное соединение

Может ли кто-нибудь понять, почему?

Я только вставить соответствующие биты классов Text_Entry и CombChange - так что могут быть пропущены декларации и фигурные скобки и т.д.

public class Text_entry extends Activity implements OnTouchListener, TextToSpeech.OnInitListener{ 

    speech = new Speech(this); 
     Intent checkTTSIntent = new Intent(); 
     checkTTSIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA); 
     startActivityForResult(checkTTSIntent, MY_DATA_CHECK_CODE); 

    Intent intent2 = new Intent(this, CombChange.class); 
    intent2.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    intent2.putExtra("newPat", enteredNumber); 
    startActivity(intent2); 
} 

@Override 
    public void onResume() { 
     super.onResume(); 
     Intent intent = getIntent(); 
     String hc =" "; 
     hc = intent.getExtras().getString("helpComb"); 
     if (hc.equals("true")) 
      helpComb = true; 
     else 
      helpComb = false; 
    } 

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if (requestCode == MY_DATA_CHECK_CODE) { 
      if (resultCode == TextToSpeech.Engine.CHECK_VOICE_DATA_PASS) { 
       speech = new Speech(this); 
      } 
      else { 
       Intent installTTSIntent = new Intent(); 
       installTTSIntent.setAction(TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA); 
       startActivity(installTTSIntent); 
      } 
      } 
    } 

.

public class CombChange extends ListActivity { 
    speech = new Speech(this); 
    speech.changeText("enter the new combination"); 
    speech.speaks(); 
    SystemClock.sleep(1300); 
     Intent intent = new Intent(this, Text_entry.class); 
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    intent.putExtra("helpComb", "true"); 
    speech.cleanUp(); 
    startActivity(intent); 
} 

.

public class Speech implements TextToSpeech.OnInitListener { 

    private String toRead; 
    private TextToSpeech tts; 
    public Speech(Context c) { 
     tts = new TextToSpeech(c, this); 
     tts.setPitch(1.2f); 
     tts.setSpeechRate(1.5f); 
    } 
    public void speaks() 
    { 
     speakOut(); 
    } 

    public void changeText(String changeTo) 
    { 
     toRead = changeTo; 
    } 


    public void cleanUp() { 
     //Don't forget to shutdown tts! 
     if (tts != null) { 
      tts.stop(); 
      tts.shutdown(); 
     } 
    } 


    public void onInit(int status) { 

     if (status == TextToSpeech.SUCCESS) { 

      int result = tts.setLanguage(Locale.UK); 

      if (result == TextToSpeech.LANG_MISSING_DATA 
        || result == TextToSpeech.LANG_NOT_SUPPORTED) { 
       Log.e("TTS", "This Language is not supported"); 
      } else { 
       speakOut(); 
      } 

     } else { 
      Log.e("TTS", "Initilization Failed!"); 
     } 

    } 
    protected void onStop() 
    { 

     if(tts != null){ 
      tts.shutdown(); 
     }  
    } 
    private void speakOut() { 
     tts.speak(toRead, TextToSpeech.QUEUE_FLUSH, null); 
     } 
    } 

.

03-21 16:42:32.515: I/TextToSpeech(24023): Sucessfully bound to com.google.android.tts 
03-21 16:42:32.535: E/ActivityThread(24023): Activity org.BT.Text_entry has leaked ServiceConnection [email protected] that was originally bound here 
03-21 16:42:32.535: E/ActivityThread(24023): android.app.ServiceConnectionLeaked: Activity org.BT.Text_entry has leaked ServiceConnection [email protected] that was originally bound here 
03-21 16:42:32.535: E/ActivityThread(24023): at android.app.LoadedApk$ServiceDispatcher.<init>(LoadedApk.java:965) 
03-21 16:42:32.535: E/ActivityThread(24023): at android.app.LoadedApk.getServiceDispatcher(LoadedApk.java:859) 
03-21 16:42:32.535: E/ActivityThread(24023): at android.app.ContextImpl.bindService(ContextImpl.java:1344) 
03-21 16:42:32.535: E/ActivityThread(24023): at android.app.ContextImpl.bindService(ContextImpl.java:1336) 
03-21 16:42:32.535: E/ActivityThread(24023): at android.content.ContextWrapper.bindService(ContextWrapper.java:401) 
03-21 16:42:32.535: E/ActivityThread(24023): at android.speech.tts.TextToSpeech.connectToEngine(TextToSpeech.java:627) 
03-21 16:42:32.535: E/ActivityThread(24023): at android.speech.tts.TextToSpeech.initTts(TextToSpeech.java:597) 
03-21 16:42:32.535: E/ActivityThread(24023): at android.speech.tts.TextToSpeech.<init>(TextToSpeech.java:553) 
03-21 16:42:32.535: E/ActivityThread(24023): at android.speech.tts.TextToSpeech.<init>(TextToSpeech.java:527) 
03-21 16:42:32.535: E/ActivityThread(24023): at android.speech.tts.TextToSpeech.<init>(TextToSpeech.java:512) 
03-21 16:42:32.535: E/ActivityThread(24023): at org.BT.Speech.<init>(Speech.java:14) 
03-21 16:42:32.535: E/ActivityThread(24023): at org.BT.Text_entry.onCreate(Text_entry.java:97) 
03-21 16:42:32.535: E/ActivityThread(24023): at android.app.Activity.performCreate(Activity.java:5184) 
03-21 16:42:32.535: E/ActivityThread(24023): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1083) 
03-21 16:42:32.535: E/ActivityThread(24023): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2064) 
03-21 16:42:32.535: E/ActivityThread(24023): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2125) 
03-21 16:42:32.535: E/ActivityThread(24023): at android.app.ActivityThread.access$600(ActivityThread.java:140) 
03-21 16:42:32.535: E/ActivityThread(24023): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1227) 
03-21 16:42:32.535: E/ActivityThread(24023): at android.os.Handler.dispatchMessage(Handler.java:99) 
03-21 16:42:32.535: E/ActivityThread(24023): at android.os.Looper.loop(Looper.java:137) 
03-21 16:42:32.535: E/ActivityThread(24023): at android.app.ActivityThread.main(ActivityThread.java:4898) 
03-21 16:42:32.535: E/ActivityThread(24023): at java.lang.reflect.Method.invokeNative(Native Method) 
03-21 16:42:32.535: E/ActivityThread(24023): at java.lang.reflect.Method.invoke(Method.java:511) 
03-21 16:42:32.535: E/ActivityThread(24023): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1006) 
03-21 16:42:32.535: E/ActivityThread(24023): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773) 
03-21 16:42:32.535: E/ActivityThread(24023): at dalvik.system.NativeStart.main(Native Method) 
03-21 16:42:32.670: I/TextToSpeech(24023): Sucessfully bound to com.google.android.tts 
03-21 16:42:32.670: D/(24023): 3333333333333333333333333333333333333333333333333 
03-21 16:42:32.670: E/SpannableStringBuilder(24023): SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length 
03-21 16:42:32.670: E/SpannableStringBuilder(24023): SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length 
03-21 16:42:32.775: I/TextToSpeech(24023): Connected to TTS Service 
03-21 16:42:32.780: I/TextToSpeech(24023): Connected to TTS Service 
+0

Действительно ли работает ваше приложение? В классе CombChange вообще нет метода. –

ответ

0

Я не уверен, насколько это поможет, но Пожалуйста, попробуйте для реализации метода onPause() в классе Activity. И отвяжите свое обслуживание явно. Для Ex:

@Override 
     protected void onPause() { 
      super.onPause(); 
      CalculatorUser c=new CalculatorUser(); //your Activity name object 
      c.unbindService((ServiceConnection) this); 
     } 

Несвязанность может решить проблему и «активность„APP“просочилась ServiceConnection» происходит в основном, когда вы выходите из вашей деятельности Таким образом, вы должны явно сказать Android OS, чтобы угодить отвязать меня от услуг моя активность используется на данный момент. Когда вы снова запустите приложение, оно будет привязано к сервису. Если это не полезно, присылайте мне код, я попытаюсь исправить его для вас.

0

АКТУАЛЬНО ответ на этот вопрос:

Вы должны вызвать destroy() на вашем TextToSpeech объекта, когда услуга будет уничтожен.

У меня была эта проблема, и я увидел ваш вопрос, поэтому я подумал, что отвечу на него всем, кто приходит сюда.

0

Для меня работает закрытие объекта TextToSpeech.

@Override 
protected void onDestroy() { 
    tts.shutdown(); 
    super.onDestroy(); 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^