2012-05-16 5 views
2

가능한 한 빨리 디스플레이에 내용을 플러시하려고하지만 UI Thread에 넣고 자하는 설치 코드가 너무 오래 걸립니다. 모든 것이 완료 될 때까지는 화면에 아무 것도 렌더링되지 않습니다.Force 플러시 UiThread의 MessageQueue android

그래서 적어도 100 밀리 초의 지연으로 View.postDelayed (Runnable, long)을 수행하면 설치가 시작되기 전에 레이아웃이 렌더링됩니다. 내가 뭘하고 싶은가 레이아웃 onResume (예를 들어)에서 화면에 렌더링을 누른 다음 설치를 계속하는 것입니다.

내가 찾고있는 것은이 메소드가 호출 될 때까지 Looper가 MessageQueue를 비우고 모든 것을 렌더링 한 다음 메시지 처리를 계속하는 방법입니다.

아마도 백그라운드 스레드에서 설정을 실행해야하지만 다른 작업은 복잡합니다.

답변

0
final Handler handler = new Handler() { 
     @Override 
     public void handleMessage(Message msg) 
     { 
      dialog.dismiss(); 

     } 

    }; 
    dialog = ProgressDialog.show(Activity.this, "", "Loading ...", false); 

      new Thread() 
       { 
       public void run() 
       { 
        while(Condition) 
         { 
         do Something 
         } 
        handler.sendEmptyMessage(0); 
       } 
       }.start(); 
+0

이것이 내 문제에 대한 해결책이 무엇인지는 잘 알지 못합니다. 실제로 UI가 렌더링 될 때 UI 스레드가 업무에 바쁘게 유지되는 것을 보아서 결코 아무것도 렌더링하지 못하게하는 것을 알고 싶습니다. 렌더링은 UI 스레드가 유휴 상태 일 때만 발생합니까? 한 지점에 렌더링 강제로 –

+0

당신은 오류 로그를 추가하시기 바랍니다 수 –

+0

죄송합니다, 오류가있다. 요약하면 다음과 같습니다. onCreate/onResume 단계에서 많은 작업을해야하고 모든 작업이 UI 스레드에서 실행 중이면 모든 작업이 완료 될 때까지 UI가 새로 고쳐지지 않습니다. 이제 백그라운드에서 작업을 수행 할 수 있으므로 UI가 신속하게 렌더링 된 다음 백그라운드 작업이 완료 될 때 상태로 새로 고침됩니다. 이것은 내가 지금하고있는 일이다. –