我有一个小部件,我可以从中开始两项活动:
public final void onUpdate(final Context context, final AppWidgetManager appWidgetManager, final int[] appWidgetIds) {
// some stuff here
...
Intent intent = new Intent(context.getApplicationContext(), B.class);
// forces intent update in pending intent
intent.setAction("NO CACHE: " + System.currentTimeMillis());
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);
views.setOnClickPendingIntent(R.id.rlFrame, pendingIntent);
intent = new Intent(context.getApplicationContext(), A.class);
// forces intent update in pending intent
intent.setAction("NO CACHE: " + System.currentTimeMillis());
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);
views.setOnClickPendingIntent(R.id.ivWidgetIcon, pendingIntent);
// some stuff here
}
情景A:
结果:
这两项活动与活动A的任务完全相同。
情景B:
结果:
两个活动与活动B以root身份处于同一任务中。
似乎完全忽略了FLAG_ACTIVITY_NEW_TASK。我希望这两项活动都是在不同的任务中启动的。有什么想法吗?
答案 0 :(得分:1)
使用以下标志
FLAG_ACTIVITY_MULTIPLE_TASK
答案 1 :(得分:0)
如果传递给startActivity()的意图包含FLAG_ACTIVITY_NEW_TASK标志,则系统会查找另一个任务以容纳新活动。通常,这是一项新任务。但是,它不一定是。如果已存在与新活动具有相同亲缘关系的现有任务,则会将活动启动到该任务中。如果没有,它开始一项新任务。
使用singletask可能会解决您的问题。
答案 2 :(得分:0)
来自PendingIntent documentation:
PendingIntent本身只是对系统维护的令牌的引用,该令牌描述了用于检索它的原始数据。这意味着,即使其拥有的应用程序的进程被终止,PendingIntent本身也将保持可用于已经给出它的其他进程。如果创建应用程序稍后重新检索相同类型的PendingIntent(相同的操作,相同的Intent操作,数据,类别和组件以及相同的标志),它将接收表示同一令牌的PendingIntent,如果它仍然有效,并且可以因此调用cancel()将其删除。
这意味着为了让它知道它有一个新的PendingIntent
,它所看到的事物中至少有一个必须是不同的。您的Intent
具有不同的Intent
,但Intent.FLAG_ACTIVITY_NEW_TASK
动作相同。最容易改变的可能是requestCode(参见粗体)。
//这里的一些东西 ...
Intent intent = new Intent(context.getApplicationContext(),B.class); //强制意图更新挂起意图intent.setAction(“NO CACHE: “+ System.currentTimeMillis());
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);的PendingIntent pendingIntent = PendingIntent.getActivity(context, 0 ,intent,0); views.setOnClickPendingIntent(R.id.rlFrame,pendingIntent);intent = new Intent(context.getApplicationContext(),A.class); // 强制意图更新未决意图intent.setAction(“NO CACHE:”+ System.currentTimeMillis的()); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); pendingIntent = PendingIntent.getActivity(context, 1 ,intent,0); views.setOnClickPendingIntent(R.id.ivWidgetIcon,pendingIntent);
//这里的一些东西
此外,在我的应用程序中,getActivity()
被设置为{{1}}中的flags参数。不确定这是否有所作为。
答案 3 :(得分:0)
对于我遇到的类似情况:
我将我的活动设置为android:launchMode =“singleTop”,然后在活动中覆盖onNewIntent(Intent)方法,以处理来自小部件的新意图。