将FLAG_ACTIVITY_NEW_TASK与FLAG_ACTIVITY_CLEAR_TOP一起使用

时间:2013-12-12 02:49:32

标签: java android

我有一个启动前台服务的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创建的,它似乎是在它自己的活动堆栈上,因此当我回到“主屏幕”时,后退按钮将我带到堆栈上的先前活动而不是退出应用程序(因为这应该是堆栈上唯一的活动)。

以下是我正在体验的更好的图片:

  1. 启动创建MainActivity的应用
  2. MainActivity启动MyService
  3. 用户执行一些操作,导致他们转换为AnotherActivity
  4. MyService创建MessageActivity
  5. MessageActivity将用户带回MainActivity
  6. 用户点击后退按钮
  7. 用户不会浏览应用程序(因为这应该是堆栈上唯一的活动),而是看到了AnotherActivity
  8. 我尝试在不使用FLAG_ACTIVITY_NEW_TASK的情况下从MyService创建MessageActivity,但这会产生一个异常,表明需要FLAG_NEW_ACTIVITY。

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

0 个答案:

没有答案