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

标签 java android multithreading android-activity

所以我在我的 Android 应用程序中有一个 Activity ,它在启动时运行。
此 Activity 只是一个带有开始按钮的页面。
当我按下开始按钮时,它会调用另一个 Activity 并自行关闭:

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

另一个 Activity 正在使用文本转语音来听写一些单词。
现在我发生了一些奇怪的事情:

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

我希望新 Activity 重新开始,而不是保留其他 Activity 。
我该怎么做?

PS:这是一个 Activity 问题,不是文字转语音的问题,因为我每次都在刷新文字转语音,它无法保留在内存中

谢谢

编辑:

这是我的 Dictating 类的 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);
        }
    }
}

我在做一些奇怪的事情,比如:

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

最佳答案

您需要添加 launchMode AndroidManifest 文件中的 Activity 属性,有关详细信息,请参阅 "Using the manifest file"

关于java - Android - 关闭一个 Activity 后,当我再次运行该应用程序时,两个 Activity 同时运行。我怎样才能避免它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9367971/

相关文章:

android - 使用 'gradlew assembleRelease' react 原生 Android 构建失败

java - Android MediaMetadataRetriever OPTION_CLOSET 不适用于某些视频

ios - 在main中,我产生了一个新的NSThread,在main中,当满足条件时,我想停止线程。如何?

Java 9 : Exporting packages to unnamed modules fail

Java 文件替换行

java - Java 中的 "Module"功能?

c# - 在 C# 中允许多个读者的锁

java - jxbrowser 下载时总是弹出空白窗口

java - Android SQLite - 删除并重新创建具有相同表名的表时出现错误列

java - 自定义 Runnable 实现,用于检查每行代码之间的 Thread.currentThread().isInterrupted()