스레드가 연결을 시도하는 동안이 대화 상자를 표시하고 싶지만이 방법을 시작하는 버튼을 누르면 대화 상자가 표시되지 않습니다.ProgressDialog가 표시되지 않습니다
0
A
답변
2
(차단) 작업이 다른 스레드에서 수행되기 때문에 표시되지 않습니다. 즉, start()
-Thread
클래스의 방법은 차단되지 않습니다.
Ergo, 대화 상자가 표시되면 스레드가 시작되고 대화 상자가 즉시 닫히고 닫힙니다.
run()
- 메서드가 끝나면 dismiss()
으로 전화를 걸면 정상적으로 작동합니다.
위의 당신을 위해 일하게 될 수도 있지만, 당신은 Thread
-class 직접 사용할 수 없습니다. 사용하기에 편한 래퍼가 있습니다.
안드로이드에서 UI 스레드에서 장기간의 작업을 수행하려면 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);
}
};
}
나는 그의 대답에 두 번째 루카스. – VendettaDroid
고맙습니다.이 대답은 – user1629115
@ user1629115입니다. 제 대답의 업데이트에서 언급했듯이, 이런 종류의 것들에는'AsyncTask'를 사용하고 싶을 것입니다. –