Android - 关闭活动后,当我再次运行应用程序时,两个活动同时运行。我怎样才能避免它?

问题描述:

所以我在我的android应用程序中有一个活动,它在开始时运行。
此活动只是一个带有开始按钮的页面。
当我按下启动按钮,它调用另一个活动,并自行关闭:Android - 关闭活动后,当我再次运行应用程序时,两个活动同时运行。我怎样才能避免它?

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

的其他活动使用文本到语音口述一些单词。
现在我发生了一些奇怪的事情:

1)我听听口述。
2)我按下后退按钮:听写停止(我想要的)
3)我再次运行应用程序,按下开始按钮。现在我开始了新的活动,并开始口述,但是在后面,我可以听到旧的活动恢复到原来的位置,并继续听写。

我想要新的活动重新开始,而不是保持其他活动。
我该怎么做?

PS:这是一个活动的问题,而不是因为我冲洗文本到语音每次文本到语音的问题,它不能被保存在内存

谢谢

编辑:

这里是我的听写类的OnCreate,有万吨的在这个类的代码,我显然不希望发布我的代码,所以这里是一些地方:

@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); 
     } 
    } 
} 

还有一些奇怪的薄gs我这样做:

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

这延迟了下一个字一秒,然后执行在主UI线程中的功能。

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

发布您的'听写'的代码。类' – Squonk 2012-02-20 21:04:48

+0

我已经添加了代码 – xtrimsky 2012-02-20 21:19:37

+0

的某些部分行,但是当活动关闭时,您正在冲洗TTS的位置在哪里? – Squonk 2012-02-20 21:26:36

您需要launchMode属性添加到您的活动中AndroidManifest文件,详见"Using the manifest file"

+0

我已经尝试了听写活动的所有模式,他们都没有工作。 One甚至打开Market App,要求我安装文本到语音(怪异) – xtrimsky 2012-02-20 21:09:05

这个问题是在:如果这件事情

,并在年底一些冲洗不知道但我不能相信没有人给过你正确的答案。另外,我认为你不应该接受一个显然没有为你解决任何问题的答案。通过接受这样的答案,您只需将垃圾邮件的StackOverflow谷歌搜索结果混淆为具有相同问题的其他人即可。

你最后做的脸红是完全错误的。根据Activity生命周期,onDestroy()永远不会被保证被调用。如果你想确保正确完成冲洗,在onPause()内部执行。

现在我给你的解决方案确实解决了你描述的主要问题。但是,如果您有时间做更完整的重写,则需要使用绑定到活动的服务。这会给你更好的控制你需要的。