【问题标题】:onCreate() method is not calling method A but onStart() calls method AonCreate() 方法不是调用方法 A 而是 onStart() 调用方法 A
【发布时间】:2021-04-12 03:38:29
【问题描述】:

我有一个看起来像这样的 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
   
}









 

【问题讨论】:

    标签: java android-studio oncreate onstart


    【解决方案1】:

    根据您的描述,似乎 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() 方法中执行时,会显示预期的数据(但仅在应用程序第二次打开时显示)
    【解决方案2】:

    根据我对 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 方法(当它们不在屏幕上时)。这应该不会导致任何问题,但是当项目以编程方式从另一个片段中移动或删除时可能会出现问题。

    【讨论】:

    • 对,我已经修复了我的日志记录,看来该方法肯定正在执行。然而,该方法也是 100% 正确的,因为当在 onStart() 方法中执行时,会显示预期的数据(但仅在应用程序第二次打开时显示)
    • 您可以检查的几件事: - 文本颜色与背景相同? - 正确显示位置约束? - 项目重叠?尝试在“MethodA()”方法中做一些其他的事情,例如将背景颜色更改为蓝色/黄色,看看会发生什么。
    • 所以问题实际上与作为 API 的方法有关。 API 会导致延迟。现在已经修复了。
    • 很高兴您能够修复它。如果您觉得我的回答有帮助,请考虑将其标记为回答或点赞。
    猜你喜欢
    • 2015-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-09
    • 2013-06-12
    相关资源
    最近更新 更多