728x90
반응형
ERROR 메시지
. 안드로이드 anr 이 발생하였는가? 잘 돌아가는 프로세스인데, 어디서 어떻게 발생한지도 모르겠고, 로그만 떡하니 남아 있을 경우, 재현도 안되고, 난감한가?
. ANR 발생시 anr 발생 로그에서 어디 프로세스 및 Activity 에서 발생하였는지 찾아라
Process: com.***.***.*** Flags: 0xc8be45 Package: com.***.***.*** Activity: com.***.***.***/.settings.ui.AAAAAATEST Subject: Input dispatching timed out (Waiting because the touched window has not finished processing the input events that were previously delivered to it.) |
TIMED_WAIT
. TIMED_WAIT를 찾자!
. TIMED_WAIT 는 현재 처리 되지 못하고 기다리고 있는 Thread 를 의미한다.
. F/W 부분의 ActivityMnagerService.java에서 해당 Thread 가 TIMED_WAIT 로 기다리고 있으며, 이부분이 ANR 로 의심된다.
"CpuTracker" prio=5 tid=17 TIMED_WAIT
| group="main" sCount=1 dsCount=0 obj=0x425f72a0 self=0x5bf35348
| sysTid=538 nice=0 sched=0/0 cgrp=apps handle=1542674336
| state=S schedstat=( 658060072 220650126 833 ) utm=38 stm=27 core=1
at java.lang.Object.wait(Native Method)
- waiting on <0x425f72a0> (a com.android.server.am.ActivityManagerService$4)
at java.lang.Object.wait(Object.java:401)
at com.android.server.am.ActivityManagerService$4.run(ActivityManagerService.java:2307)
onResume Main Thread 분리
. F/W Thread 에서 블럭이 발생하지만, 우리가 F/W 을 수정하기는 어려우므로, APP 에서 수정하고자 한다.
. onResume 에서 시간이 많이 소요되는 구문을 Main Thread 에서, Fork 된 Thread 로 분리하여, 해결해보자.
. runable 객체를 바로 생성해서, 간단하게 Thread 로 구현하자.
. 기존
@Override
protected void onResume()
{
super.onResume();
**** 실행 코드 ****
}
. 변경
@Override
protected void onResume()
{
super.onResume();
new Thread(new Runnable()
{
public void run()
{
**** 실행 코드 ****
}
}).start();
}
728x90
반응형
'IT > Android' 카테고리의 다른 글
System.err: android.content.pm.PackageManager$NameNotFoundException: com.example.app (2) | 2024.01.31 |
---|---|
첫번째 타겟 보다 앞에서 명령어가 시작되었습니다 멈춤 (2) | 2020.11.10 |
Android DeadObjectException (0) | 2020.11.05 |
Android FastBoot Error (2) | 2020.06.08 |
ADT 마지막 버전 링크 (0) | 2020.06.04 |
댓글