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

Async Task 일시 중지 질문..

0 추천

안녕하세요.

현재  doInBackground에서 특정 뷰를 캡쳐해서 publishProgress로 해당 사실을 알립니다.

이 과정을 루프를 돌면서 9번정도 하는데..문제는

onProgressUpdate에서 UI작업이 완료되기 전에  doInBackground에서 다음 루프를 돌아버리기 때문에 캡쳐가 제대로 되지 않습니다.

제가 원하는 건 onProgressUpdate 에서 UI작업이 완료되면 doInBackground의 다음 루프를 돌게끔 하고 싶은데 잘 안되네요.. Async Task를 일시정지하는 방법은 없나요?

현재는 아래와 같은 로직으로 해놨는데..맘에 안들어요 ㅠㅠ

고수님들이 도움 부탁드립니다.

for(int i=0; i < miniMapInfo.length; i++){
                beCaptured = true;
                publishProgress(null, (int) (((float) (i + 5) / stepMax) * progressBar.getMax()), i, 0);

                while(true){
                    if(!beCaptured){
                        miniMapView.setDrawingCacheEnabled(true);
                        miniMapBitmap = miniMapView.getDrawingCache();
                        stream = new ByteArrayOutputStream();
                        miniMapBitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);
                        miniMapView.setDrawingCacheEnabled(false);
                        beCaptured = true;
                        publishProgress(null, null, i, 1);
                        while(true) {
                            if(!beCaptured){
                                break;
                            }else{
                                try {
                                    Thread.sleep(50);
                                } catch (InterruptedException e) {
                                    e.printStackTrace();
                                }
                            }

                            if( ((double)( System.currentTimeMillis() - captureStartTime)) >= 3000 ){
                                break;
                            }

                        }
                        break;
                    }else{
                        try {
                            Thread.sleep(50);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }

                    if( ((double)( System.currentTimeMillis() - captureStartTime)) >= 20000 ){
                        break;
                    }
                }
            }

            beCaptured = false;
            publishProgress(R.string.load_msg_complete, progressBar.getMax());
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

            return progressBar.getMax();
        }

 

치솟음 (3,710 포인트) 님이 2015년 5월 31일 질문

1개의 답변

0 추천
뷰를 백그라운드 스레드에서 건드리면 정상동작하지 않을 가능성이 높습니다.

꼭 해야겠다면 한번 캡처하는 AsyncTask를 순차적으로 여러번 돌리면 될 겁니다.
익명사용자 님이 2015년 6월 1일 답변
...