【问题标题】:Activity ignore intent's extra fields活动忽略意图的额外字段
【发布时间】:2010-05-26 10:08:46
【问题描述】:

例如,

在 ActivityA 中有一个按钮来创建一个 Intent,它将在新任务中启动 ActivityB,如下所示:

Intent i = new Intent(this, ActivityB.class);
i.setData(Uri.parse("http://www.google.com"));
long timestamp = System.currentTimeMillis();
i.putExtra("ts", timestamp);
i.addFlag(Intent.FLAG_ACTIVITY_NEW_TASK);
Log.d(TAG, "Sending: " + timestamp);
startActivity(i);

然后在ActivityB的onResume()方法中,有这段代码可以检查时间戳:

long timestamp = getIntent().getExtras().getLong("ts");
Log.d(TAG, "Receiving: " + timestamp);

现在我第一次从 ActivityA 调用 ActivityB 时,我得到以下日志:

Sending: 120006000
Receiving: 120006000

然后,如果我让 ActivityB 在后台运行(通过按 Home 按钮),然后启动 ActivityA,然后再次调用 ActivityB,则会打印以下内容:

Sending: 120013000
Receiving: 120006000

虽然 ActivityB 似乎被新的 Intent 带到了前面。 Intent 中的额外字段被留下。

这是一个错误还是预期的行为?

【问题讨论】:

    标签: android android-intent


    【解决方案1】:

    只需阅读文档:

    http://developer.android.com/reference/android/app/Activity.html#getIntent%28%29

    getIntent() 返回启动活动的 Intent。如果 Activity 已经在后台运行,那么您不启动 Activity B,而是将其带到前面。

    【讨论】:

    • 是的,但是由于新的意图将它带到了前面,我认为假设它将取代旧的意图是合理的。
    • 啊好的。我认为这是一个功能,而不是一个错误;)
    【解决方案2】:

    也许你应该听 onNewIntent 而不仅仅是 onResume?

    【讨论】:

    • 其实我也试过用FLAG_ACTIVITY_SINGLE_TOP覆盖onNewIntent(),但是传入的intent还是旧的。
    • 啊,对不起,我的错,onNewIntent()其实可以得到新的额外数据,感谢帮助=)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-22
    • 2015-06-12
    • 2016-11-10
    • 2019-09-20
    • 1970-01-01
    • 1970-01-01
    • 2020-10-06
    相关资源
    最近更新 更多