안드로이드 개발 질문/답변
(글 수 45,052)
현재 반복적으로 무거운 작업이 이루어 지고 그 상태를 Custom 한 Progress 형태로
화면에 뿌릴려고 합니다. ( 무거운 작업이란 파일 복사, 삭제등.... )
문제는 반복적인 작업은 전부 이루어지는데 정작 그 상태에 대한 정보 즉
invalidate, postinvalidate 등은 이루어지지 않는것 처럼 보입니다.
Thread 도 해보고 Handler 도 해보았지만 ( 잘 다루지는 못합니다.. )
Log로 찍었을때 가장 로그가 처리 순서 대로 나오는게 현재의 코딩이었습니다.
고수분들의 답변 간절히 기다리겠습니다.
p.s onDraw(Canvas canvas) 를 가장 빠르고 확실하게 호출 할 수 있는 방법이 있습니까???
예를 들어 onDraw의 인자값 canvas 를 참조해서 onDraw(Canvas canvas) 가 아닌 곳에서
canvas의 참조로 그린다면 이 것이 맞는 방법이며 빠를까요???
화면 터치에 대한 반응으로 가장 빠르게 화면에 다시 그릴 수 있는 방법이 뭘까요 ??? ( 핸드 페인팅 어플 같은 경우요 )
화면에 뿌릴려고 합니다. ( 무거운 작업이란 파일 복사, 삭제등.... )
문제는 반복적인 작업은 전부 이루어지는데 정작 그 상태에 대한 정보 즉
invalidate, postinvalidate 등은 이루어지지 않는것 처럼 보입니다.
if ( delCount != 0 ) { //// DELETE for ( int i = 0 ; i < delete.size(); i++ ) { if ( delete.get(i).isClick == true ) { //////////////////////////////// //// 무거운 작업 //// //////////////////////////////// /// 이 부분에서 화면을 다시 그려야 하는데 안되네요;; mx += ( mxT / (float)delCount ); postInvalidate(); //// 캔버스 참조를 얻어서 ///// mCanvas.drawRect(124, 0, 124 + mx, 18, paint); ///// 강제로 호출 해도 그려지지 않는것 처럼 보입니다. } } }
Thread 도 해보고 Handler 도 해보았지만 ( 잘 다루지는 못합니다.. )
Log로 찍었을때 가장 로그가 처리 순서 대로 나오는게 현재의 코딩이었습니다.
고수분들의 답변 간절히 기다리겠습니다.
p.s onDraw(Canvas canvas) 를 가장 빠르고 확실하게 호출 할 수 있는 방법이 있습니까???
예를 들어 onDraw의 인자값 canvas 를 참조해서 onDraw(Canvas canvas) 가 아닌 곳에서
canvas의 참조로 그린다면 이 것이 맞는 방법이며 빠를까요???
화면 터치에 대한 반응으로 가장 빠르게 화면에 다시 그릴 수 있는 방법이 뭘까요 ??? ( 핸드 페인팅 어플 같은 경우요 )
2009.09.17 19:57:19
이런 작업을 처리하는데는 일반적으로 Thread와 Handler를 사용해서 처리해야하는데 아무래도 자주 사용하는 부분이므로 Android에서는 AsyncTask 라는 클래스를 제공합니다. http://developer.android.com/reference/android/os/AsyncTask.html Progress 처리예제는 안나와있는데 문서보고 한번 해보시면 될것 같네요. http://android-developers.blogspot.com/2009/05/painless-threading.html
UI업데이트 작업을 쓰레드에서 핸들러로 보내야 할것 같습니다.
무거운 작업에 대한 진행을 나타내는 프로그레스 바를 완전히 동기화 시키는것은..
성능상 좋은 방법은 아닌것 같습니다.
예상 시간 계산해서 진행하고 중간에 두 세번 정도 동기화 시켜줘야 성능에 문제가 없을 것 같습니다.