2017-12-20 14 views
2

私の前提質問にShaiのコメントCodename One - Avoid screen size change on Android on app startupは、この新しい質問を私に示唆しました:コードネーム1 - 睡眠が良ければ?

睡眠は良いですか?私はTestUtils.waitFor()の使用法を参照して、アプリを殺す危険はありません。 たとえば、すでにフォームを表示していて、それを少なくとも0.5秒間表示したい場合は、次のフォームを表示する前に睡眠を挿入します。

私は意味:それはなどThread.sleep()とは異なりEDT上で「適切に」眠るよう用

startForm.addShowListener(e -> { 
     startForm.setTransitionOutAnimator(CommonTransitions.createFade(1000)); 
     TestUtils.waitFor(500); 
     nextForm.show(); 
    }); 
startForm.show(); 

答えて

1

待ちは賢いです:

public static void waitFor(final int millis) { 
    if(verbose) { 
     log("waitFor(" + millis + ")"); 
    } 
    if(Display.getInstance().isEdt()) { 
     Display.getInstance().invokeAndBlock(new Runnable() { 
      public void run() { 
       try { 
        Thread.sleep(millis); 
       } catch (InterruptedException ex) { 
       } 
      } 
     }); 
    } else { 
     try { 
      Thread.sleep(millis); 
     } catch (InterruptedException ex) { 
     } 
    } 
} 

しかし、あなたは "の1つに睡眠を呼び出す場合あなたが物事を危険にさらすかもしれない "問題のある"ライフサイクルの方法。例えば。 init/start/constructorなどが完了していなければ、ネイティブOSスレッドはアプリケーションが起動していないとみなします。非常に短い時間枠内で完了を期待しているOSによって呼び出されるstopメソッドについても同じことが当てはまります。

それ以外はネイティブOSスレッドの複雑さをほとんど隠しているので、EDTを尊重する睡眠のバージョンが機能するはずです。私が考えることができる1つの例外は、ネイティブOSスレッドを明示的に公開するブラウザのナビゲーションコールバックです。