簡體   English   中英

onSizeChanged()調用onCreate()和onStart()嗎? -安卓

[英]onSizeChanged() calls onCreate() and onStart()? - Android

我的應用程序當前在onCreate()方法中調用一個方法,這樣,一旦創建視圖,游戲便會開始並且動畫將運行。 但是,當我翻轉屏幕以在縱向和橫向之間切換時,將再次調用此方法。

我已經將調用行移到了onStart()方法甚至方法類構造函數上。

這是被調用的方法:

public void startGame() {
    Handler handler = new Handler();
    handler.postDelayed(new Runnable() {

        public void run() {
            runGame();
        }
    }, 500);
}

延遲所有內容的構造,然后再運行,否則將無法正常工作。

我有辦法停止onSizeChanged()影響此方法的調用嗎? 還是有一種方法可以調用該方法,以便在活動開始時啟動該方法(再次使onSizeChanged()不能影響該方法,並且在調用之前將所有內容初始化)。

感謝您的光臨。

最簡單的方法是添加:

android:configChanges="orientation|screenSize"

告訴系統您自己來照顧他們。 但是,不建議這樣做。

注意:應避免使用此屬性,並且只能將其用作最后一種手段。 請閱讀處理運行時更改以獲取有關如何正確處理由於配置更改而導致的重新啟動的更多信息。

或者,您可以檢查savedInstanceState。 如果不為null,則表示用戶更改了方向(或應用程序因配置更改而返回)。 也許是這樣的:

if(savedInstanceState == null)
    startGame();
else
    //handle a configuration change if necessary

請參閱方向更改時不要重新加載應用程序

編輯:

if(savedInstanceState == null) {
    startGame();
} else {
    //handle a configuration change if necessary
    int yourVar = savedInstanceState.getInt("something");
}

將此添加到您的清單:

android:configChanges="screenSize"

您可以使用靜態線程變量代替處理程序嗎?

例如

  private static Thread gameThread = new Thread(new Runnable(){
        public void run()
        {
              //if necessary: Thread.sleep(500);
              runGame();
        }
  }

  @Override
  protected void onCreate(Bundle savedInstanceState) {
        //rest of oncreate code here
        if(gameThread.isAlive() == false)
        {
              gameThread.start();
        }
  }

暫無
暫無

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

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