我在处理程序onCreate中的活动从Intent中检索一个值并对其进行处理

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


请注意,我的活动在清单中具有属性android:launchMode="singleTask"
执行doSomethingWithValue之后,我想从意图中清除"value"多余的内容,因此,下一次活动从后台恢复时,返回的意图是getIntent(),但不应包含"value"多余的内容。如何为下一次执行onCreate清除此值? setIntent在这里不起作用。

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

最佳答案

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

我建议将doSomethingWithValue()的成功执行存储在一个属性中,例如mSomethingDone。当系统(而非用户)取消活动时,将调用onRetainNonConfigurationInstance。实现:

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


现在,在您的onCreate中检索布尔值:

@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/

10-12 06:20