마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

Thread에서 Handler를 이용해서 ProgressDialog 띄우고 없애기

0 추천

안녕하세요.

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는 사용자 입력 막는부분이 없어서 곤란한 부분이 있네유;

언제나초보 (120 포인트) 님이 2018년 7월 27일 질문
t1 스레드의 호출 시점이 어딘지 알려주세요
t1 thread는 MainActivity에서 버튼이 눌리면 RESTClient Class를 초기화하고 차례로 RESTClient class내의 getHttpData와 postHttpData 함수를 호출합니다.

요 두 함수 내에 t1 thread가 있습니다.
restClient.getHttpData();
restClient.postHttpData();

Thread를 실행하기전에 MainActivity로 Message를 보내서 ProgressDialog를 실행시키고 작업이 끝나면 다시 Message를 보내서 ProgressDialog를 dismiss하는 형태로 만들었는데, MainActivity에서 ProgressDialog를 띄우고 함수를 호출해도 동일하게 thread가 끝나야 ProgressDialog가 뜨더라구요.
无党派-独立-自主-无关 意见 关于 货币-币种-通货-币值-股票-证券-存量-库存-存货-股份-基金-经费-笔钱-款项-资金 券商-掮客-经纪人的. https://currency-trading-brokers.com/forex-comparisons-ratings-reviews-china.html

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...