2013-10-09 114 views
1

我開發一個Android應用程序工作,我打運行後,我解開AVD並單擊菜單加載我的申請,我立即得到這個消息:The application Pico TTS (process com.svox..pico) has stopped unexpectedly. Please try againAndroid應用不模擬器

這是我的AndroidManifest.xml

<application android:icon="@drawable/icon" android:label="@string/app_name" android:allowBackup="true"> 
     <activity android:name=".MPActivity" 
        android:label="@string/app_name" 
        > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 

    </application> 
</manifest> 

這些都是從我的logcat消息:

10-09 13:01:14.796: I/TextToSpeech.java(1861): initTts() successfully bound to service 
10-09 13:01:16.916: E/ActivityThread(1861): Activity com.kelamrsan.MPActivity has leaked ServiceConnection [email protected] that was originally bound here 
10-09 13:01:16.916: E/ActivityThread(1861): android.app.ServiceConnectionLeaked: Activity com.kelamrsan.MPActivity has leaked ServiceConnection [email protected] that was originally bound here 
10-09 13:01:16.916: E/ActivityThread(1861):  at android.app.LoadedApk$ServiceDispatcher.<init>(LoadedApk.java:938) 
10-09 13:01:16.916: E/ActivityThread(1861):  at android.app.LoadedApk.getServiceDispatcher(LoadedApk.java:833) 
10-09 13:01:16.916: E/ActivityThread(1861):  at android.content.ContextWrapper.bindService(ContextWrapper.java:347) 
10-09 13:01:16.916: E/ActivityThread(1861):  at android.speech.tts.TextToSpeech.initTts(TextToSpeech.java:467) 
10-09 13:01:16.916: E/ActivityThread(1861):  at android.speech.tts.TextToSpeech.<init>(TextToSpeech.java:433) 
10-09 13:01:16.916: E/ActivityThread(1861):  at com.kelamrsan.MPActivity.onCreate(MPActivity.java:47) 
10-09 13:01:16.916: E/ActivityThread(1861):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
10-09 13:01:16.916: E/ActivityThread(1861):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611) 
10-09 13:01:16.916: E/ActivityThread(1861):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663) 
10-09 13:01:16.916: E/ActivityThread(1861):  at android.app.ActivityThread.access$1500(ActivityThread.java:117) 
10-09 13:01:16.916: E/ActivityThread(1861):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931) 
10-09 13:01:16.916: E/ActivityThread(1861):  at android.os.Handler.dispatchMessage(Handler.java:99) 
10-09 13:01:16.916: E/ActivityThread(1861):  at android.os.Looper.loop(Looper.java:130) 
10-09 13:01:16.916: E/ActivityThread(1861):  at android.app.ActivityThread.main(ActivityThread.java:3683) 
10-09 13:01:16.916: E/ActivityThread(1861):  at java.lang.reflect.Method.invokeNative(Native Method) 
10-09 13:01:16.916: E/ActivityThread(1861):  at java.lang.reflect.Method.invoke(Method.java:507) 
10-09 13:01:16.916: E/ActivityThread(1861):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
10-09 13:01:16.916: E/ActivityThread(1861):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
10-09 13:01:16.916: E/ActivityThread(1861):  at dalvik.system.NativeStart.main(Native Method) 

這是我onCreate

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    Button buttonLoadImage = (Button)findViewById(R.id.loadimage); 

textView = (TextView) findViewById(R.id.textView); 
textViewCol = (TextView) findViewById(R.id.textViewColor); 
targetImage = (ImageView) findViewById(R.id.targetimage); 
textViewVal = (TextView) findViewById(R.id.textViewValue); 

    mTts = new TextToSpeech(this, new OnInitListener() {  
    @Override 
    public void onInit(int status) { 
    TTSInitialized = true; 
    } 
    }); 

    Intent installIntent = new Intent(); 
    installIntent.setAction(TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA); 
    startActivity(installIntent); 

buttonLoadImage.setOnClickListener(new Button.OnClickListener(){ 

@Override 
public void onClick(View arg0) { 
// TODO Auto-generated method stub 
Intent intent = new Intent(Intent.ACTION_PICK,android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
    startActivityForResult(intent, 0); 
}}); 

} 

那麼,你覺得這個問題是?

+0

問題是在這裏:在com.kelamrsan.MPActivity.onCreate(MPActivity.java:47) – Kuffs

+0

我感激你的關心, Kuffs。 但我不能解決問題,以前所有的工作都很完美。 但是,我已經更新了這些問題,並在此處添加了創建代碼。看看你能否找到它。 – Sean

回答

4

看起來您正在創建傳遞當前活動作爲上下文的TTS對象。

然後,您可以立即開始一個新的活動(我認爲不要在您的onPause關閉的TTS對象)

這使得系統抱怨,因爲您有綁定到現在非活動活動服務活動。

您應該使用Activity Lifecycle回調來設置和拆除所有依賴於活動的服務。

如設置您的TTS對象的onResume(),並關閉它在的onPause()

+0

應該是這樣。那麼你能告訴我該怎麼做。我幾乎是這個新手。 – Sean

+0

活動暫停時關閉您的TTS服務。在你的情況下,甚至不要啓動它,因爲你沒有立即使用它,因爲你立即將控制權交給新的活動。 – Kuffs

+0

看到這個:http://developer.android.com/training/basics/activity-lifecycle/index.html永遠不要假設一個變量,當你離開一個活動(在你的情況下,mTts)仍然是活動的在你回來的時候在那裏。系統可以在需要時關閉系統。 – Kuffs

0

聽起來好像你有一個廣播監聽器被加載一次,然後不會按預期發佈。如果是這種情況,那麼您需要分析覆蓋該廣播接收機的應用程序的生命週期,並確保該應用程序先前啓動該活動時已關閉。如果需要,您甚至可以在創建廣播時進行嘗試捕捉,並且不執行任何操作。由於Android會爲您處理衝突,並在所有其他方式都失敗時悄然失敗;顯然找到合適的關閉將是理想的。

這就是我所能提供的。