gpt4 book ai didi

java - onPause()中,为什么有些方法放在super.onPause()调用之后没有执行?

转载 作者:行者123 更新时间:2023-12-01 13:17:15 26 4
gpt4 key购买 nike

此代码打印日志,但向父 Activity 返回 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,但正在执行日志行。这最终引发了一个错误,其中父 Activity 的数据值变为 null。父 Activity 使用 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() 调用放在 block 的末尾时,情况发生了变化。现在一切都按预期进行:

@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(),并在父 Activity 中成功为 mClicks2 赋值。

这种行为的原因是什么? Log.d() 在 super.onPause() 之后执行,但 Intent 从未实例化。

最佳答案

因为在 super.onPause() 调用期间,Android 会在幕后处理您使用 setResult(RESULT_OK, data); 设置的结果。如果您在调用 super.onPause() 之后设置结果,那么您就错过了将其传递回父 Activity 的机会,那就太晚了。您必须遵守 Activity 的生命周期才能正常工作。

关于java - onPause()中,为什么有些方法放在super.onPause()调用之后没有执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22367996/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com