onCreate() 方法不是调用方法 A 而是 onStart() 调用方法 A

问题描述

我有一个看起来像这样的 onCreate() 方法:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity);        
    
    if (blah) {
        blahblah;
    } else {
        method1();
    }

    MethodA();

}

一个看起来像这样的 onActivityResult 方法:

@Override
protected void onActivityResult(int a,int b,Intent c) {
    super.onActivityResult(b,a,c);
    if (b == blah) {
        if (a == blah) {
            Method1();
        }
    }
}

方法 1():

public void Method1() {
    blah
}

我有一个 methodA() 应该第一次出现(目前它不会出现,除非我将 methodA() 放在 onStart() 中 - 然后它只会在第二次尝试打开应用程序时出现

public void MethodA() {
   sets text on screen
   
}









 

解决方法

根据您的描述,onCreate() 方法的返回时间似乎比预期的要早

如果布局正在设置(即 setContentView() 调用有效),那么 MethodA() 肯定会执行,除非如前所述,onCreate() 方法在 if 或 else 块执行中更早地返回。使用调试器执行单步调试,单步执行 if-else 块中的 method1() 等方法调用。

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity);        
    
/* Did you check this If-Else block so that the control actually */
/* goes down below? to MethodA() */
    if (blah) {
        blahblah;
    } else {
        method1();
    }

    MethodA();

}
,

根据我对 Android 的了解,它应该被调用。从您提供的信息来看,我可以做的调试和搜索错误是有限的,但我想知道您如何检查您的函数是否被调用。

  • 据我所知,您只相信视觉反馈来验证您的函数是否被调用。

我不希望那样,特别是因为在您的特定情况下,您会说它确实在两次发布后出现。

尝试使用 Logcat(默认集成在 Android Studio 中,而不是插件)来检查该函数是否被调用。首先验证是否在启动时调用了 onCreate(根据我的经验应该是这种情况)。

在你的类的顶部写静态成员变量(如果你写“logt”并按tab,它会自动创建自己):

private static final String TAG = "ActivityName";

在 OnCreate 方法中写入(如果你写“logd”并按 Tab,它会自动创建自己):

log.d(TAG,"I am printing from the OnCreate method");

在 Logcat 中,您将能够过滤您的 debugTagName。

https://developer.android.com/studio/debug/am-logcat

如果这不是问题,请验证您是在处理片段还是活动。在容器中,可能会更早为片段调用 OnCreate 方法(当它们不在屏幕上时)。这应该不会导致任何问题,但当项目以编程方式从另一个片段移动或删除时可能会导致。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...