2014-12-08 1 views
1

저는 작업중인 꽤 큰 응용 프로그램을 가지고 있습니다. 때로는 2.3 장치에서 시작할 때 UI 스레드가 어떻게 든 멈추는 경우가 있습니다. 나는 그것이 내 자신의 과제 중 하나라고 생각하지 않지만, 나는 그것이 무엇인지 알 수 없다. UI 스레드에서 현재 실행중인 정확한 작업을 파악할 수있는 방법이 있습니까?2.3 장치에 UI 스레드가 걸렸습니다.

상세 정보 : 나는 어떤 시점에서 주요 Looper를 사용하는 HandlerRunnable를 실행 해요,하지만 run() 그 경우에 실행되지 없구요. 화면을 터치하면 ANR도 표시됩니다. 나는 그것이 배경 이미지 중 하나를 제거 할 때 그것이 덜 붙어있는 것처럼 느껴지기 때문에 그것이 어떤 방식 으로든 메모리와 관련이 있어야한다고 생각한다. 그래도 OOM 예외는 없습니다.

편집 나는 주요 Looper에 대한 로깅을 사용 가능. 파견되는 마지막 작업은 what=1004입니다. 이것은 분명히 나에게서 아니다.

Looper: >>>>> Dispatching to Handler{406cbec0} null: 1004 
+0

보조 스레드에서 UI를 업데이트 하시겠습니까? – Cata

+0

내가 아는 것이 아니라. 나는 엄격한 모드를 가능하게했다. 나는 그것이 나를 알릴 것이라고 생각한다. – SimonSays

+0

글쎄, 내 생각에 당신은 메인 쓰레드 나 네트워킹/db 콜에서 무언가를 무겁게하거나, 보조 쓰레드에서 UI를 업데이트하고 있지만, 대부분의 경우 앱이 다운 될 것이다. 더 많은 도움이 필요하면 여기에 활동 코드를 게시하십시오 :) – Cata

답변

0
응답으로 (코멘트 충분하지 점) 게시 죄송

하지만 난 당신의 AsyncTasks 및 스레드의 이름을 지정하고 가능한 문제를 해결하는 데 도움이 될 수 DDMS이나 다른 안드로이드 프로파일 링 도구를 사용하여 생각합니다.

성능과 시간이 많이 소요되는 방법과 스레드 또는 메모리 오버로드가 발생한 것으로 파악하십시오 (DDMS를 사용하여 힙 검사).

는 다음 링크에서 봐이 어떤 도움이되지 못했습니다

http://developer.android.com/tools/debugging/ddms.html http://developer.android.com/tools/debugging/debugging-tracing.html

죄송합니다.

+0

문제는 내가 dex 메소드 수를 초과했으며 proguard를 사용하지 않고 이전 Android 버전에서 앱을 실행할 수 없다는 것입니다. 따라서 메모리 덤프 나 메소드 프로파일 링은 거의 선택 사항이 아닙니다. – SimonSays

관련 문제