2017-12-20 4 views
2

내 prevuos 질문에 Shai의 의견 Codename One - Avoid screen size change on Android on app startup 내게이 새로운 질문 제안 :코드 명 1 - 수면이 좋을 때?

어떤 경우에 수면이 괜찮습니까? 나는 앱을 죽일 위험없이 TestUtils.waitFor()의 사용법을 소개합니다. 예를 들어, 이미 양식을 보여 주었고 적어도 30 초 이상 표시하고 싶다면 다음 양식을 표시하기 전에 잠을 넣으십시오. 괜찮습니까?

는 말은 : 그것은

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) { 
     } 
    } 
} 

그러나 Thread.sleep() 등 : 달리 EDT에 "제대로"자고대로 "의 하나에 잠을 호출 할 경우에 대한

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

답변

1

대기가, 똑똑 문제가되는 "라이프 사이클 방법을 사용하면 위험 할 수 있습니다. 예 : init/start/constructor 등은 그렇지 않으면 완료해야합니다. 네이티브 OS 스레드는 앱이 시작되지 않았다고 가정합니다. 매우 짧은 시간 내에 완료가 예상되는 OS에 의해 호출되는 중지 메소드에 대해서도 마찬가지입니다.

우리는 대부분 네이티브 OS 스레드의 복잡성을 숨기고 있기 때문에 EDT를 존중하는 수면 버전이 제대로 작동해야합니다. 내가 생각할 수있는 예외 중 하나는 네이티브 OS 스레드를 명시 적으로 노출시키는 브라우저 탐색 콜백입니다.