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

onCreate 에서 Handler 호출시에 바로 실행되지않습니다

0 추천
onCreate 에서 Dialog를 띄우기 위해 Handler 메시지를 날렸는데 제대로 수행되지가않는것같아 디버깅을해보니

handler를 날리는순간 바로 처리하지않고 onCreate가 끝나는 시점에서 드디어 handler 를 수행하는것같아요

지금 현 상황은 oncreate 상단쯤에 로딩 다이얼로그를 띄우고 그 아래에 딜레이좀 걸릴수있는 소스를 적어주고

그 밑에다가 다이얼로그.dismiss() 하는 핸들러를 호출하려고하고자하고있습니다
레드오션 (1,310 포인트) 님이 2013년 6월 9일 질문

3개의 답변

+1 추천
1. 다이얼로그를 어떤놈을 써서 만들었는지는 모르겠지만 onCreate시에 정상적으로 오픈이 되는놈인지 확인해보셔요. 안드로이드에서 onCreate시에 작동이 불가능한 놈들이 꽤 있습니다.

 

2. 핸들러에서 명령을 내릴경우 큐에 쌓이는것이기 때문에 onCreate처리 큐에 이미 많은 처리가 기다리고 있다면 늦게 실행될 수 있습니다.

 -> 핸들러를 사용하지 말고 호출해보세요.

 -> 굳이 핸들러를 사용해야 하는 이유가 있는건가요?
그후최초 (2,980 포인트) 님이 2013년 6월 10일 답변
+1 추천
C# 에서는 특정한 함수가 종료되고 나서 특정 기능이 수행이 되는 현상을 해결하기 위해 delegate라는 대리자를 사용합니다.

delegate를 사용하면 특정 기능이 바로 수행이 되는 역할을 합니다.

하지만 안드로이드에서는 delegate라는 대리자가 없기 때문에 다른 방법을 사용합니다.

Activity를 사용해서 기능을 수행 하든지 아니면 delegate를 만들어서 사용하지요.

이 방법을 검색 해 보세요.
센스가이 (2,010 포인트) 님이 2013년 6월 10일 답변
+1 추천
onCreate 에 시간이 걸릴것같은 작업이 있으신건가요?

그래서 그 로딩시간을 표현하시려고 onCreate에서 로딩 다이얼로그를 표현하시려 했던것이라면..

접근이 틀리지 않았나 싶네요.

Handler 가 왜 늦게 호출되는지는 다른분들이 설명해주신듯 하고, 다른 부분을 말씀드리자면..

안드로이드의 메인 쓰레드에서 오래 걸릴듯한 작업은 서브 쓰레드를 구현해서 그곳을 이용해 처리하도록 권장하고 있습니다. 물론 이는 안드로이드 뿐만이니라 다른 플랫폼에서도 마찬가지지요. 따라서 onCreate 에서 오래 걸릴법한 작업은 따로 Thread 를 통해서 작업하셔야 하며, 이 쓰레드에서 dialog 를 표현하는 방법으로 구현을 하셔야 하지 않을까 싶습니다.

안드로이드에서 이러한 부분을 플랫폼적으로 제약하고 있는데 이를 'ANR(Application Not Responding)' 이라고 하며,
만약 Thread 를 사용하시지않고 onCreate 에서 작업을 진행하시다가 5초 이상 지연 될경우 앱은 여지없이 ANR 오류를 뿜으며, 사용자에게 위협을 가할것입니다.
Frog (3,910 포인트) 님이 2013년 6월 10일 답변
Frog님이 2013년 6월 10일 수정
...