2011-03-31 3 views
3

활동이없는 Android 프로세스 (즉, 독립 실행 형 서비스)가 ANR을 수신 할 수 있습니까?독립 실행 형 서비스에서 ANR 가능성

안드로이드는 언급 : "안드로이드에서, 애플리케이션 응답은 작업 관리자와 창 관리자 시스템 서비스로 모니터링는 다음 조건 중 하나에 감지하면 안드로이드가 특정 응용 프로그램에 대한 ANR 대화 상자를 표시합니다."

UI 인터페이스가없는 서비스가 ANR을 유발할 수 있는지 여부를 의미합니까?

답변

0

활동이없는 (즉, 독립형 서비스) 안드로이드 프로세스가 ANR을 수신 할 수 있습니까?

말하기 쉽습니다. 대화 상자가 나타나지 않을 수도 있지만 서비스가 주 애플리케이션 스레드에서 너무 오래 걸리면 서비스가 종료됩니다.

+0

귀하의 빠른 응답 주셔서 감사합니다. 1) 메인 애플리케이션 쓰레드에 '너무 길다'라고 정의되어 있는가? 또는 UI에 대해 5 초와 동일합니다. 2) logcat 디버그에 ANR 예외가 표시됩니까 (기술적으로 ANR입니까?) 3) 서비스의 주 스레드를 차단하는 모든 것이 ANR을 초래할 수 있습니까? – AndroidPlaya

4

예. 독립 실행 형 서비스 (활동 없음)가 포함 된 프로세스에서 ANR을 얻을 수 있습니다. logcat에 ANR이 표시됩니다 (기술적으로 ANR 임). 예를 들어, 다음 상황에서 이것을 보았습니다 :

우리는 독립형 서비스와 동일한 프로세스에서 실행되는 BroadcastReceiver를 보유하고 있습니다. 이것은 주 스레드에서 실행됩니다. (뭔가 메인 스레드를 차단 있기 때문에) 방송 의도가 적절한 시간 내에 브로드 캐스트 리시버에 파견 할 수없는 경우, OS는 ANR을 생성합니다. 설명서에 BroadcastReceiver 완료에 대한 제한이 10 초임을 나타냅니다.

일반적으로 독립 실행 형 서비스 프로세스의 주 스레드에서 실행되는 유일한 방법은 라이프 사이클 메소드 (onCreate, onDestroy 등), BroadcastReceivers 및 기본 스레드에서 생성 한 Handler가 전달한 모든 것입니다. 나머지 코드는 다른 스레드에서 실행 중입니다.

나는 CommonWare의 대답에 대한 귀하의 의견에 답변하고 싶지만 그에 대한 평판은 충분하지 않습니다. 그래서 나는 당신이 원하는 정보를 포함하고있는 또 다른 대답을 만들었습니다.

관련 문제