簡體   English   中英

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

[英]onCreate() method is not calling method A but onStart() calls method 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 的了解,它應該被調用。 根據您提供的信息,我可以做的調試和搜索錯誤有限,但我想知道您如何檢查您的 function 是否被調用。

  • 根據我的閱讀,您只信任視覺反饋來驗證您的 function 是否被調用。

我不希望這樣,特別是因為在您的特定情況下,您告訴它確實在兩次啟動后出現。

嘗試使用 Logcat(默認集成在 Android Studio 中,不是插件)來檢查 function 是否被調用。 首先驗證是否在啟動時調用 onCreate(根據我的經驗應該是這種情況)。

在您的 class 頂部寫入 static 成員變量(如果您編寫“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 方法(當它們不在屏幕上時)。 這應該不會導致任何問題,但是當項目以編程方式從另一個片段中移動或刪除時可能會出現問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM