我有一个启动前台服务的Android应用程序,如下所示:
在通话活动中:
serviceIntent = new Intent(this, MyService.class);
startService(serviceIntent);
在服务的onStart()中:
startForeground(...
在某些时候,服务需要向用户显示一条消息,然后转换回“主屏幕”,这被定义为用LAUNCHER intent-filter标记的活动(但它可以是任何活动)例)。我通过在MyService内部创建Intent到具有标志FLAG_ACTIVITY_NEW的活动来实现此目的,如下所示:
Intent i = new Intent(getApplicationContext(), ShowMessageActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.putExtra("MESSAGE", "Show me to the user");
getApplicationContext().startActivity(i);
从这个新活动中,我显示一条消息,然后尝试通过创建一个标记为FLAG_ACTIVITY_CLEAR_TOP的新Intent将用户带回“主屏幕”:
finish();
Intent i = new Intent(this, MainActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
我似乎遇到的问题是,由于MessageActivity是使用FLAG_ACTIVITY_NEW_TASK创建的,它似乎是在它自己的活动堆栈上,因此当我回到“主屏幕”时,后退按钮将我带到堆栈上的先前活动而不是退出应用程序(因为这应该是堆栈上唯一的活动)。
以下是我正在体验的更好的图片:
我尝试在不使用FLAG_ACTIVITY_NEW_TASK的情况下从MyService创建MessageActivity,但这会产生一个异常,表明需要FLAG_NEW_ACTIVITY。
我的问题是,如何使用FLAG_ACTIVITY_NEW_TASK创建活动以清除整个应用的活动堆栈。期望的行为是,一旦我从MessageActivity转换到MainActivity,MainActivity就是堆栈上的唯一活动。