这段代码正在打印日志,但是向父活动返回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/

10-10 16:05