避免多个活动实例

时间:2013-03-26 10:17:23

标签: android android-intent

我只是希望我的活动只有一个实例。我读到了关于意图标志和启动模式,但它只是拒绝工作。 我尝试了SingleTask,SingleTop,各种意图标志等 我的清单:

    <activity
        android:name="com.secret.domain.Player"
        android:label="@string/title_activity_player" 
        android:launchMode="singleTask">
    </activity>

和启动代码:

Intent intent = new Intent(getActivity(),Player.class);
intent.putExtra(Intent.EXTRA_TEXT,s);
intent.setData( Uri.parse( s ));
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

播放器活动显然会播放音乐,如果我回去创建一个新实例,它们仍可以同时播放。从来没有调用OnNewIntent()。 我认为我做错了什么,但我找不到。

编辑:我知道它听起来与其他线程类似,但是我读了它们仍然无法弄清楚如何实现我想要的。

1 个答案:

答案 0 :(得分:0)

所以你已经向你的腿射了一枪,他())))

因为您的活动应该在单个任务中运行(因为singleTask属性)。每次启动时,系统都会为Activity创建一个新任务,保留前一个实例,并将其作为内存中的媒体播放器组件。

这就是为什么你会听到几个创作任务中的几首音乐曲目。

在这种情况下,您可以将Activity设为singleInstance(使用清单中的相应属性),然后如果您已经创建了Activity的任务,则只需将需要处理onNewIntent()中的意图,您应该在没有任何Intent标志的情况下启动它。但是,您应该使此Activity具有ACTION_MAINCATEGORY_LAUNCHER过滤器,如第二段中所述here。或者你应该在你的清单中使用standard并使用FLAG_ACTIVITY_CLEAR_TOP启动它,考虑到你将失去所有顶级活动。