2012-02-20 1 views
1

私はアンドロイドアプリで活動を開始しています。
このアクティビティは開始ボタンが付いた単なるページです。私は、スタートボタンを押すと
、それは別のアクティビティを呼び出し、自分自身を閉じますAndroid - アクティビティを閉じた後、もう一度アプリを実行すると同時に2つのアクティビティが実行されます。どうすればそれを避けることができますか?

Intent i = new Intent(this, Dictating.class); 
startActivity(i); 
finish(); 

他の活動は、いくつかの単語を決定するために、テキストを音声に変換を使用しています。
今私は何か変わったことが起こっている:

1)私は口述を聞く。
2)私は戻るボタンを押す:口述の停止(私が欲しいもの)
3)私は再びアプリケーションを実行し、スタートボタンを押します。今私は新しい活動を実行して口述をしていますが、後ろには以前のアクティビティを聞くことができます。

新しいアクティビティをもう一度開始し、他のアクティビティを維持しないことをお勧めします。
どうすればいいですか?

PS:私は毎回、テキストを音声に変換をフラッシュしていますので、これは、テキストを音声に変換する問題の活動の問題ではなく、それは

はあなた

ありがとうございメモリに保持することができませんでした

EDIT:

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.streaming); 

    Intent checkIntent = new Intent(); 
    checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA); 
    startActivityForResult(checkIntent, MY_DATA_CHECK_CODE); 

    this.txtCurrentWord = (TextView) findViewById(R.id.txtCurrentWord); 
    this.btnPlayPause = findViewById(R.id.btnPlayPause); 
    this.btnPlayPause.setOnClickListener(this); 

} 

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == MY_DATA_CHECK_CODE) { 
     if (resultCode == TextToSpeech.Engine.CHECK_VOICE_DATA_PASS) { 
      // success, create the TTS instance 
      this.tts = new TextToSpeech(this, this); 
     } else { 
      // missing data, install it 
      Intent installIntent = new Intent(); 
      installIntent.setAction(TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA); 
      startActivity(installIntent); 
     } 
    } 
} 
:ここ

は私の口述クラスののonCreateで、私は明らかに、すべての私のコードを投稿する必要はありません。このクラスのコードのトンがあるので、ここでいくつかの部分であります

いくつかの奇妙な薄いがありますgs私は次のようにしています:

Runnable task = new Runnable() { 
    public void run() { 
     //runs on ui 
     runOnUiThread(new Runnable() { 
      public void run() { 
       readNextWord(); 
      } 
     }); 
    } 
}; 
worker.schedule(task, 1, TimeUnit.SECONDS); 

これは、次の単語を1秒遅らせてから、メインのUIスレッドで機能を実行します。あなたが詳細については、AndroidManifestファイル内の自分の活動にlaunchModeプロパティを追加する必要が

@Override 
public void onDestroy() { 
    tts.shutdown(); 
    super.onDestroy(); 
} 
+0

あなたの「口述」のコードを投稿してください。クラス ' – Squonk

+0

コードの一部を追加しました – xtrimsky

+0

アクティビティが閉じられたときにTTSを「フラッシュする」場所はどこですか? – Squonk

答えて

1

この質問は上にある"Using the manifest file"

+0

私はディクテーションアクティビティですべてのモードを試しましたが、いずれも動作しませんでした。 One開店したマーケットアプリでも、私にテキスト読み上げ(奇妙な) – xtrimsky

0

を参照してください。この問題

そして最後に、いくつかのフラッシュがあればわかりません誰もあなたに正しい答えを与えたことは信じられません。また、あなたのために何も解決していない答えを受け入れるべきではないと思います。このような回答を受け入れることで、StackOverflowのGoogle検索結果に、同じ問題を抱える他の人のために迷惑メールが混乱するだけです。

最後に行うフラッシュは完全に間違っています。アクティビティライフサイクルによれば、onDestroy()は必ず呼び出されることは保証されません。フラッシングが正しく行われるようにするには、onPause()の内部で行います。

今のところ私があなたに与えている解決策は、あなたが説明した主な問題を解決します。ただし、より完全なリライトを行う時間がある場合は、アクティビティにバインドするサービスを使用することをお勧めします。それはあなたが必要とする細かいコントロールを与えるでしょう。

関連する問題