2012-08-28 2 views

답변

2

(차단) 작업이 다른 스레드에서 수행되기 때문에 표시되지 않습니다. 즉, start()-Thread 클래스의 방법은 차단되지 않습니다.

Ergo, 대화 상자가 표시되면 스레드가 시작되고 대화 상자가 즉시 닫히고 닫힙니다.

run()- 메서드가 끝나면 dismiss()으로 전화를 걸면 정상적으로 작동합니다.


위의 당신을 위해 일하게 될 수도 있지만, 당신은 Thread -class 직접 사용할 수 없습니다. 사용하기에 편한 래퍼가 있습니다.

안드로이드에서 UI 스레드에서 장기간의 작업을 수행하려면 AsyncTask을 사용해야합니다.

+0

나는 그의 대답에 두 번째 루카스. – VendettaDroid

+0

고맙습니다.이 대답은 – user1629115

+0

@ user1629115입니다. 제 대답의 업데이트에서 언급했듯이, 이런 종류의 것들에는'AsyncTask'를 사용하고 싶을 것입니다. –

0

덧붙여서, 루카스 (Lukas)가 말한 것을 토대로이 예제를 볼 수 있습니다.

http://www.helloandroid.com/tutorials/using-threads-and-progressdialog

public class ProgressDialogExample extends Activity implements Runnable { 

    private String pi_string; 
    private TextView tv; 
    private ProgressDialog pd; 

    @Override 
    public void onCreate(Bundle icicle) { 
      super.onCreate(icicle); 
      setContentView(R.layout.main); 

      tv = (TextView) this.findViewById(R.id.main); 
      tv.setText("Press any key to start calculation"); 
    } 

    @Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) { 

      pd = ProgressDialog.show(this, "Working..", "Calculating Pi", true, 
          false); 

      Thread thread = new Thread(this); 
      thread.start(); 

      return super.onKeyDown(keyCode, event); 
    } 

    public void run() { 
      pi_string = Pi.computePi(800).toString(); 
      handler.sendEmptyMessage(0); 
    } 

    private Handler handler = new Handler() { 
      @Override 
      public void handleMessage(Message msg) { 
        pd.dismiss(); 
        tv.setText(pi_string); 

      } 
    }; 

}

관련 문제