0

我有两个活动。让我们称它们为ActivityAand ActivityBsingleTaskActivityA在清单文件中被标记。我可以ActivityBActivityA使用简单startActivity调用开始(不Intent使用标志)。我也可以ActivityC从它ActivityA开始ActivityB(也使用 "simple" Intents)。

ActivityB有一个执行此代码的按钮:

Intent intent = new Intent(ActivityB.this,
                ActivityA.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

我还有一个可以开始ActivityA使用此代码的小部件:

Intent aIntent = new Intent(context, ActivityA.class);
aIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0,
                aIntent, 0);

它也可以ActivityB从网格项目开始:

Intent bIntent = new Intent(context, ActivityB.class);
PendingIntent bPendingIntent = TaskStackBuilder.create(context)
        .addNextIntent(aIntent).addNextIntent(bIntent )
        .getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);

如果我ActivityA从启动器开始ActivityB,从它开始(或ActivityA-> ActivityC-> ) - 我可以使用后退按钮或按钮(如上所述)ActivityB移回ActyvityA(或)并且不会重新创建。没关系。ActivityCActivityBActivityA

问题是,如果我ActivityB从小部件开始并使用后退按钮或按钮ActivityB(如上所述)ActivityA被重新创建并成为堆栈中的单个实例。

我希望能够以ActivityA始终是根活动的方式管理这两个活动,如果它已经在运行,则不会重新创建。

4

1 回答 1

0

你不能用TaskStackBuilder. TaskStackBuilder如果您能找到一种方法来确保ActivityB除非ActivityA已经存在,否则您可以避免使用它。这样,当ActivityB返回 时,不会重新创建ActivityA的实例。ActivityA

要解决这个问题,ActivityB您应该启动ActivityA并传递一个额外的信息,告诉ActivityA您希望它启动,而不是直接从小部件启动ActivityB

Intent bIntent = new Intent(context, ActivityA.class);
bIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | 
        Intent.FLAG_ACTIVITY_NEW_TASK);
bIntent.putExtra("launchActivityB", true);
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0,
            bIntent, 0);

onCreate()onNewIntent()ActivityA,检查是否存在额外内容,如果存在,则应ActivityB立即启动。

于 2015-03-08T15:46:51.870 回答