该服务会创建一个持久性Notification
,并通过PendingIntent
点击启动主要活动。这是代码。
Intent notificationIntent = new Intent(getApplicationContext(), ViewPagerActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(StreamingService.this, 0, notificationIntent, 0);
但是,如果主要活动已启动,当我按下通知时,它将再次启动 ,并再次启动...
最后,我有相同的活动,一个在另一个的顶部。我可以通过按下后退按钮来看到这一点,这将杀死主要活动一次,然后让我回到相同的活动,直到我关闭最后一个。
如何防止这种情况发生? PendingIntent
可以检测到瞄准活动正在运行,因此它不会再次创建相同的活动,而是启动正在运行的活动吗?
PS。如果不能解释这个问题我会道歉。如果是这种情况,请告诉我,我会重新解释这个问题。
答案 0 :(得分:7)
我也找到了这个解决方案。将此属性添加到Manifest
<activity android:name=".MyActivity"
android:label="@string/app_name"
android:launchMode="singleTop" // <-- THIS LINE
>
每个Activity
您需要此功能。到目前为止,它完全没有错误。
哪种解决方案更好?如果没有,我的更容易。
答案 1 :(得分:5)
根据您要实现的确切行为,您可以将其中一个标志作为getActivity()的最后一个参数传递:
答案 2 :(得分:1)
尝试在REQUEST_CODE中使用其他值。 在REQUEST_CODE中不使用默认值0 。
或您的pendingIntent将重新启动您的活动。
如果要使用正常活动周期,请在创建PendingIntent时输入请求值。
gamesRef.on('value', function(snapshot){
// find all empty games
var gamesToRemove = [];
snapshot.forEach(game => {
if(game.val().player1 == ""
&& game.val().player2 == ""
&& game.val().player3 == ""
&& game.val().player4 == ""){
gamesToRemove.push(game.key());
}
});
return gamesToRemove;
})