我有一个 BroadcastReceiver,用于将数据发送到另一个可能正在运行或未运行的活动。我在 onReceive() 方法中使用意图,并使用 putExtra() 将数据放入。数据被发送到活动,但是,即使活动已经在前台运行,活动的 onCreate() 方法也会被调用,所以我猜它正在创建一个新实例。我只想调用 onResume() ,或者如果意图不存在,我可以通过其他方式创建/启动意图,如果存在,则只需将其“恢复”即可。现在,正在重新创建该活动,但我不希望这样。
public void onReceive(Context context, Intent intent) {
intent.setClass(context, MyActivity.class);
intent.putExtra("message", "the data here");
//intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
Log.d("sending msg", "msg");
context.startActivity(intent);
}
如果我不使用 FLAG_ACTIVITY_NEW_TASK,则会抛出 RuntimeException,特别告诉我,如果我想从不是活动的内容启动活动,我必须使用FLAG_ACTIVITY_NEW_TASK
.
如果您想将可能正在运行的活动放在前面,并完成可能位于其之上的任何其他活动,您可以指定以下标志:
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
在这种情况下,当接收此意图的活动已经在运行时,onNewIntent()
方法将被调用,而不是从头开始重新创建它。
如果您想在所需的活动运行时简单地重新排序活动(即将其移动到堆栈顶部),请尝试以下操作:
intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)