我在处理程序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/