Java 使用带有FLAG_ACTIVITY_CLEAR_TOP的FLAG_ACTIVITY_NEW_任务

Java 使用带有FLAG_ACTIVITY_CLEAR_TOP的FLAG_ACTIVITY_NEW_任务,java,android,Java,Android,我有一个android应用程序,可以启动前台服务,如下所示: 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); 在呼叫活动中: serv

我有一个android应用程序,可以启动前台服务,如下所示:

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);
在呼叫活动中:

serviceIntent = new Intent(this, MyService.class);
startService(serviceIntent);
在服务的onStart()中:

在某些情况下,服务需要向用户显示一条消息,然后转换回“主屏幕”,它被定义为带有LAUNCHER intent筛选器的活动(但在本例中,它可以是任何活动)。我通过在MyService内部创建一个意图来实现这一点,该意图指向一个带有标志_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);
从这个新活动中,我显示一条消息,然后尝试通过创建一个带有标志“活动”的新意图,将用户带回“主屏幕”:

finish();
Intent i = new Intent(this, MainActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
我似乎遇到的问题是,由于MessageActivity是使用FLAG_ACTIVITY_NEW_TASK创建的,它似乎位于它自己的活动堆栈上,因此当我返回“主屏幕”时,后退按钮会将我带到堆栈上的上一个活动,而不是退出应用程序(因为这应该是堆栈上的唯一活动)

以下是我所经历的更好的画面:

  • 启动创建MainActivity的应用程序
  • MainActivity启动MyService
  • 用户执行一些操作,导致他们转换到另一个活动
  • MyService创建MessageActivity
  • MessageActivity将用户带回MainActivity
  • 用户单击后退按钮
  • 用户看到的不是退出应用程序(因为这应该是堆栈上的唯一活动),而是另一个活动
  • 我试图从MyService创建MessageActivity而不使用FLAG\u ACTIVITY\u NEW\u任务,但这会产生一个异常,表明FLAG\u NEW\u ACTIVITY是必需的

    我的问题是,如何获得使用FLAG_activity_NEW_TASK创建的活动,以清除整个应用程序的活动堆栈。期望的行为是,一旦我从MessageActivity转换到MainActivity,MainActivity就是堆栈上唯一的活动