这段代码正在打印日志,但是向父活动返回null:
@Override
protected void onPause() {
super.onPause();
Log.d("Two", "onPause()");
Intent data = new Intent();
data.putExtra(TWO_CLICKS_FOR_ONE, mClicks2);
setResult(RESULT_OK, data);
}
似乎未创建Intent,但是正在执行日志行。最终导致了一个错误,即父活动的数据值变为空。父活动使用onActivityResult检索数据:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Log.d("One", "onActivityResult()");
if (data == null) {
Log.d("One", "data == null !!!");
return;
}
mClicks2 = data.getIntExtra(Two.TWO_CLICKS_FOR_ONE, 0);
Log.d("One", "mClicks2 = " + mClicks2);
}
就像我说的,这里的数据为空值,因此mClicks2永远不会分配值。
当我将super.onPause()调用放在代码块的末尾时,情况发生了变化。现在一切都按预期工作:
@Override
protected void onPause() {
Log.d("Two", "onPause()");
Intent data = new Intent();
data.putExtra(TWO_CLICKS_FOR_ONE, mClicks2);
setResult(RESULT_OK, data);
super.onPause();
}
使用此代码可以实例化Intent数据,调用putExtra()和setResult(),并成功在父活动中为mClicks2分配了一个值。
这种行为的原因是什么?在super.onPause()之后执行Log.d(),但永不实例化Intent。
最佳答案
因为Android在后台处理您在setResult(RESULT_OK, data);
调用期间使用super.onPause()
设置的结果。如果您在调用super.onPause()
之后设置结果,则只是错过了将其传递回父级活动的机会,您为时已晚。您必须遵守活动的生命周期,才能正常工作。
关于java - 在onPause()中,为什么在调用super.onPause()之后放一些方法不执行?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22367996/