将数据发送到可能已启动的另一个活动

Ste*_*bbi 2 android android-activity

我有一个BroadcastReceiver,我用它来发送数据到另一个可能正在运行或未运行的活动.我在onReceive()方法中使用intent,并使用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);    
       }
Run Code Online (Sandbox Code Playgroud)

如果我不使用FLAG_ACTIVITY_NEW_TASK,则抛出RuntimeException,特别告诉我如果我想从非活动的东西开始活动,我必须使用FLAG_ACTIVITY_NEW_TASK.

wsa*_*lle 6

如果您想将可能正在运行的活动放在前面,并完成可能在其上的任何其他活动,您可以指定以下标志:

intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
Run Code Online (Sandbox Code Playgroud)

在这种情况下,当您收到此意图的活动已在运行时,onNewIntent()将调用该方法,而不是从头开始重新创建它.

如果您只想在所需活动运行时(即将其移动到堆栈顶部)对活动进行重新排序,请尝试以下操作:

intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
Run Code Online (Sandbox Code Playgroud)