2010-05-19 9 views
0
좋아 .. 내가 아래에 비슷한 일을하고있는 중이 야

는 :Android에서 진행 대화 상자가 표시되지 않습니까?

private void onCreate() { 
    final ProgressDialog dialog = ProgressDialog.show(this, "Please wait..", "Doing stuff..", true); 
Thread t = new Thread() { 
    public void run() { 
     //do some serious stuff... 
     dialog.dismiss();   
    } 
}; 
t.start(); 
t.join(); 
stepTwo(); 

} 

그러나, 내가 무엇을 발견하고 나의 진행 대화 상자도 나타 적이 있다는 것입니다. 내 앱이 잠시 멈추어 서 스레드 t 내부를 따라 잡아 당기고 있음을 알았지 만 내 대화 상자가 나타나지 않는 이유는 무엇입니까?

내가 선을 제거하는 경우 :

t.join(); 

그럼 난 어떻게 무엇을 발견 진행 대화 상자가 표시 않지만, 내 애플 stepTwo()를 시작이다; 스레드에서 무슨 일이 완료되기 전에 ..

어떤 아이디어?

답변

2

은 핸들러에게

public class MyActivity { 

private Handler handler; 

private void onCreate() { 

    handler = new Handler() { 

     @Override 
     public void handleMessage(Message msg) { 
     pd.dismiss(); 
     stepTwo(); 
     } 
    }; 

    final ProgressDialog dialog = ProgressDialog.show(this, "Please wait..", "Doing stuff..", true); 
    Thread t = new MyThread() { 
    t.start(): 

} 

private class MyThread extends Thread() { 
    public void run() { 
     //do some serious stuff... 
     handler.sendEmptyMessage(0);  
    } 
} 

} 
+0

Sebi - 전에 Handler와 같이 일한 적이 없습니다. 구현 방법을 시도했지만 일부 오류가 발생했습니다 (특히 개인 클래스 MyThread가 스레드를 확장 함).()) 그래서 이것을 작동시킬 수 없었습니다. PD가 나타나도록하기 위해 초기 코드에 더 쉬운 해결책이 있습니까? – Tyler

+0

스레드 t = 새로운 MyThread() { t.start() : }}; 잘못되었습니다. 올바른 것은 입니다. Thread t = new MyThread(); t.start(); –

2

귀하의 가입() 라인을 차단해서 ProgressDialog를 실행하는 UI 스레드를 사용하려고합니다. 따라서 레이아웃, 도면 등을 차단하고 있습니다.

+0

나는 본다. 그래서 핸들러 만이이 문제를 해결할 수있는 유일한 방법일까요? – Tyler

관련 문제