Java onCreate()方法没有调用方法A,但onStart()调用方法A

Java onCreate()方法没有调用方法A,但onStart()调用方法A,java,android-studio,oncreate,onstart,Java,Android Studio,Oncreate,Onstart,我有一个onCreate()方法,看起来像这样: @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity); if (blah) { blahblah; } else { method1();

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

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

    MethodA();

}
@Override
protected void onActivityResult(int a, int b, Intent c) {
    super.onActivityResult(b, a, c);
    if (b == blah) {
        if (a == blah) {
            Method1();
        }
    }
}
onActivityResult方法如下所示:

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

    MethodA();

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

我有一个methodA(),它应该第一次出现(在它没有出现的那一刻,除非我把methodA()放在onStart()中,然后它只在第二次尝试打开应用程序时出现)

public void MethodA() {
   sets text on screen
   
}









 

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

  • 从我所读到的内容来看,您只信任视觉反馈来验证您的函数是否被调用
我不希望这样,尤其是在你的一个具体案例中,你告诉我它确实在两次发射后出现

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

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

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

在Logcat中,您可以在调试标记名上进行筛选


如果不是这个问题,请验证您是否正在使用片段或活动。在容器中,可能会在前面为片段调用OnCreate方法(当片段不在屏幕上时)。这不会导致任何问题,但当项目以编程方式从另一个片段中移动或移除时可能会出现问题。

根据您的描述,似乎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();

}

由于某些原因,我的Debuggin无法工作,我无法创建日志。是否值得知道,在此活动之前,我有一个MainActivity,它也有一个OnCreate方法(Log.d在那里工作,但不适用于此处提到的onCreate活动。我使用了修复日志记录,似乎该方法确实正在执行。但是,该方法也是100%正确的,因为在onStart()方法中执行时,会显示预期的数据(但仅在第二次打开应用程序时,如前所述)对,我使用了fixed my logging,看起来该方法确实正在执行。但是该方法也是100%正确的,因为当在onStart()方法中执行时,会显示预期的数据(但仅在应用程序第二次打开时,如前所述)您可以检查的内容很少:-文本颜色与背景相同?-正确显示位置约束?-项目重叠?尝试在“MethodA()中执行其他操作方法,例如,将背景颜色改为蓝色/黄色,然后看看会发生什么。因此问题实际上是API的方法。API导致延迟。现在已经修复了。很高兴您能够修复它。如果您发现我的答案有用,请考虑将其标记为答案或投票。
    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();

}