android - 从后台恢复后如何更新此 Activity 将开始的 Intent ?

标签 android android-activity

我在处理程序 onCreate 中的 Activity 从 Intent 中检索一个值并用它做一些事情

protected void onCreate(Bundle b){
    ....
    Intent i = getIntent();
    if (i.hasExtra("value")){
      String val = i.getStringExtra("value");
      doSomethingWithValue(val);
    }
}

请注意,我的 Activity 在 list 中具有属性 android:launchMode="singleTask"。 执行 doSomethingWithValue 后,我想从 Intent 中清除 "value" extra,所以当下次 Activity 从后台恢复时, Intent 返回但 getIntent() 不应该有 "value" 额外的。如何为下一次执行 onCreate 清除此值? setIntent 在这里不起作用。

换句话说,当我按下后退按钮然后返回到我的应用时,doSomethingWithValue(val) 会再次执行,但我不需要这个。

最佳答案

我不知道 Intents 是否可以更改,尽管这个概念对我来说似乎是错误的(毕竟是 Intent 启动了您的 Activity 并且没有改变)。

我建议将 doSomethingWithValue() 的成功执行存储在一个属性中,比如 mSomethingDone。当 Activity 被系统(而不是用户)取下时,调用 onRetainNonConfigurationInstance。实现:

@Override
public Object onRetainNonConfigurationInstance() {
    return mSomeThingDone;
}

现在在您的 onCreate 中检索 bool 值:

@Override
public void onCreate(Bundle savedInstanceState) {
  final Object data = getLastNonConfigurationInstance();
  if (data != null) {
    mSomeThingDone = (Boolean)data;
  }
}

然后根据 mSomeThingDone 的值检查是否需要运行 doSomethingWithValue。

关于android - 从后台恢复后如何更新此 Activity 将开始的 Intent ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4913590/

相关文章:

java - Java 的 TimerTask 只能在很短的时间内工作吗?

java - 错误:Execution failed for task ':app:prepareComAndroidSupportAppcompatV72311Library' .

java - 异步任务无法访问原始线程

android - animateLayoutChanges 是否适用于 ListView?

android - 在 google play (Android Market) 上上传屏幕截图时无法解析响应错误

java - Android系统如何告诉应用程序该应用程序已进入后台(不可见)?

android - 单击通知并在android中启动应用程序

android - 嵌套 fragment

android - 致命异常 : java. lang.IllegalStateException 没有从 INITIALIZED 下来的事件

Android:在 list 中找不到 Activity ,但它在那里?