안녕하세요.
Handler도 잘 동작하고, ProgressDialog도 잘 동작하는데.. timing의 문제가 있습니다.
request 버튼을 누르면 다른 class에 있는 thread 함수가 돌아가는데 함수를 호출하기 전에 ProgressBar나 ProgressDialog를 VISIBLE로 바꿔주고, Thread가 끝나면 Handler를 이용해서 INVISIBLE로 바꾸도록 하는 간단한 코드인데요..
Thread 함수 실행
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
switch(v.getId()) {
case R.id.request_button :
progressBar.setVisibility(View.VISIBLE);
restClient.getHttpData();
restClient.postHttpData();
break;
}
}
});
Thread 실행 후 Message를 MainActivity로 전송
Thread t1 = new Thread(new Runnable() {
@Override
public void run() {
try {
.......
}
Message message = Message.obtain();
message.arg1 = 2;
mHandler.sendMessage(message);
}
});
t1.start();
MainActivity에서 onCreate() 에서 Handler Message 처리
handler = new Handler() {
@Override
public void handleMessage(Message msg) {
if(msg.arg1 == 1)
progressBar.setVisibility(View.VISIBLE);
else {
progressBar.setVisibility(View.INVISIBLE);
}
}
};
아주 간단한데요..
저렇게 해놓으면 ProgressBar나 Dialog가 전혀 안뜨고, message를 받았을 때 INVISIBLE 처리하는 부분을 없애면 thread를 다 실행한 다음 ProgressBar나 Dialog가 나타납니다. 그리곤 당연히 없어지질 않지요.
실행해보니 ProgressDialog VISIBLE과 INVISIBLE이 Thread가 다 실행되고 난 뒤에 동작하는 것 같습니다.
INVISIBLE message처리하는 부분을 막으면, ProgresDialog뜨는게 thread가 다 실행된 다음이거든요.
뭐가 잘못됐는지 알 수 있을까요?
API 26이후로 ProgressDialog 사용하는게 별로 안좋다고 해서 ProgressBar를 이용하려고 했는데도 똑같고.. 거기에 ProgressBar는 사용자 입력 막는부분이 없어서 곤란한 부분이 있네유;