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

标签 java android android-intent android-activity lifecycle

此代码打印日志,但向父 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/

相关文章:

java - OpenGL ES 2.0 和动态 VBO

java - Android S8+ 警告信息 "does not support the current Display size setting and may behave unexpectedly"

java - 此 URL 不支持 HTTP 方法 GET

java - Maven 找不到 org.junit,即使它在依赖项中

android - android eclipse中的多页面切换

Android startActivityForResult 不返回日历数据

java - 如何在java中填充多边形?

每次启动应用程序时都会重新创建 Android 数据库

android - 编辑预定的待定意向

android - Android 中的 FileProvider 路径创建和 BitmapFactory.decodefile 问题