在从服务启动活动之前关闭所有活动

时间:2013-06-18 20:37:41

标签: android android-intent

我已经在我的应用程序中实现了GCM,并且根据从服务器收到的有效负载,我正在启动一个活动,称之为Activity(B)。

我的要求是,如果我在使用应用程序时从服务器收到该特定有效负载,并假设我在活动(A)上它应该关闭(A)应该关闭,并且只有活动(B)应该在该应用程序的实例中一旦活动B从我的GCM的GCMIntentService类开始,就应该关闭所有堆叠的活动。

我曾经尝试但没有奏效的事情。

Intent myIntent=new Intent(myContext,ActivityB.class);
myIntent.setFlag(Intent.FLAG_ACTIVITY_CLEAR_TOP);
myContext.startActivity(myIntent);

我也试过了旗帜

Intent.FLAG_ACTIVITY_NEW_TASK

所有组合。

但没有运气。让我知道,如果我在清单中某处出现错误,同时声明我没有使用任何特殊参数(如launchMode或我的清单文件中的某些内容)。

1 个答案:

答案 0 :(得分:1)

您需要使用以下代码启动应用程序的根活动(即:清单中包含ACTION=MAINCATEGORY=LAUNCHER的活动):

Intent intent = new Intent(context, RootActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("launchActivityB", true);

这将清除任何现有任务中的所有活动,并启动RootActivity的新实例。在RootActivity.onCreate()中添加以下代码(在致电super.onCreate()之后:

if (getIntent().hasExtra("launchActivityB")) {
    // We have been started so that we can launch ActivityB, finish and do that now
    finish(); // End this activity right now
    Intent intent = new Intent(this, ActivityB.class);
    startActivity(intent);
    return; // do no further processing in this activity
}

注意:由于ActivityB的工作方式,尝试使用FLAG_ACTIVITY_CLEAR_TOP启动FLAG_ACTIVITY_CLEAR_TOP的原因并不符合您的要求。它会清除现有任务中的所有活动,这些任务位于您尝试启动的活动的现有实例(在此情况下为ActivityB之上(之前)。由于您的任务中没有ActivityB的现有实例,因此该标志没有执行任何操作。