与 launchMode 混淆

Confused with launchMode

我制作了一个以两种方式运行的音乐播放器:

  1. 如果作为普通应用程序启动,它将继续播放上次关闭时正在播放的内容,并且应该在后台启动;
  2. 如果在文件管理器中 select 编辑音频文件,它会播放在前台单击的歌曲。

因为我只想要应用程序的一个实例运行,所以我添加到 mainfest:

android:launchMode="singleTask"

我所做的就是执行这个 onCreate:

    uri = getIntent.getData();
    if (uri != null) {
        newsong = uri.toString()...
        play(newsong);
    } else {
        moveTaskToBack(true);
        playoldsong();
    }

它很好用,除了以下事实:当像 (1) 那样启动时,过了一会儿,我在文件管理器中 select 一首歌曲,主 activity 被带到前面(这是我想要的)但它继续播放它在歌曲 selection 之前播放的内容。播放器忽略了新歌,我想让它切换到新歌。

这实际上是有道理的,因为我唯一称呼新歌的地方是 onCreate

也许 launchMode 不正确?也许我应该 @Overwrite OnNewTask(Intent) 方法?哪个是 'cheaper' 解决方案?

您必须覆盖 onNewIntent() 才能启动用户在文件管理器中单击的歌曲。