9

이상한 문제가 있습니다. 모든 정보를 제공해야하는지에 대해 완전히 확신 할 수는 없지만 최선을 다할 것입니다. 자세한 정보를 추가해야하는지 알려주세요. 문제가 발생하여 내 Activity을 끝내고 이전 Activity으로 돌아가거나 (새로운 Intent으로 시작 - 문제는 Activity을 완료하는 데 집중된 것처럼 보임) UI 성능이 약 6 ~ 7 초 동안 급격히 떨어지는 문제가 있습니다. , 정상으로 돌아갑니다. LogCat에서ActivityRecord에 대한 활동 Idle Timeout

이 경고가 지속적으로 나타납니다

07-11 22:09:42.594: W/ActivityManager(292): Launch timeout has expired, giving up wake lock! 
07-11 22:09:42.601: W/ActivityManager(292): Activity idle timeout for ActivityRecord{42bf6e00 com.kcoppock.sudokubeta/com.kcoppock.sudoku.SudokuBoardActivity} 

을 즉시 밖으로 활동 시간, 정상으로 UI 성능을 반환한다. 그 시점까지는 매우 부진합니다. 나는 주 스레드를 막을 수 있다는 것을 알고있는 코드가 없다. 그리고 내 모든 onPause() 메서드를 주석으로 처리하여 차이가 있는지 여부를 확인할 수도있다.

Activity은 백그라운드 스레드를 생성하지 않으며 네트워크 활동을 수행하지 않으며 액세스하는 유일한 디스크 액세스는 SharedPreferences입니다. 내가 찾을 수 있었던 이전 질문은 HistoryRecord의 유휴 시간 초과에 관한 것이고 ActivityRecord이 아닙니다.

어떤 아이디어가 발생합니까? 또는 UI 스레드를 차단하는 것이 무엇인지 결정할 수있는 방법은 무엇입니까?

편집 : 좋아, super.onCreate 제외 모든을 주석 시도()와 된 setContentView() - 문제가 계속 지속됩니다. 다른 액티비티에서는 발생하지 않지만 여기에는 아무 것도 없습니다.입니다. :/

+0

기술적으로는 SharedPreferences''/ w UI 스레드를 차단 할 수 있습니다,하지만 난 그게 아마 네트워크 액세스 또는 무언가만큼 가능성이없는 것 같아요.어떻게 든 제거하려고 했습니까? –

+0

@AlexLockwood 아이디어를 제공해 주셔서 감사합니다. 그냥 해봤 어. 모든 SharedPreferences에 대한 참조를 제거하고 내 onPause() 및 onResume()을 주석 처리했지만 차이는 없습니다. – kcoppock

+0

kcoppock 또한 내 질문을 참조 http://stackoverflow.com/questions/30053090/flash-toggle-button-crash-android – Nepster

답변

12

Oh geez. 시행 착오 밖에서 진단하기가 꽤 어려운 것들 중 하나지만, 알아 냈습니다. 참고로, 다른 누구든지이 문제가 발생하면 내 레이아웃의 사용자 정의보기로 나타납니다. 레이아웃을 수정 한 후 일부 레이아웃 수정을 수행하기 위해 ViewTreeObserver.OnGlobalLayoutListener()을 추가했지만 레이아웃을 수정하여 레이아웃을 변경하여 본질적으로 무한 루프를 생성했습니다 (그러나 ANR을 발생시키지 않음). 내 솔루션과 같이했다 :

private class BoardLayoutListener implements OnGlobalLayoutListener { 
    @Override 
    public void onGlobalLayout() { 
     //...do stuff here 

     //REMOVE this listener so that you don't repeat this forever 
     ViewTreeObserver obs = SudokuBoard.this.getViewTreeObserver(); 
     obs.removeGlobalOnLayoutListener(this); 
    } 
} 

이 솔루션은 내 second highest rated answer on StackOverflow 특별히이 다루는 고려, 매우 아이러니하다. : P

한숨

+8

hahahah ... 걱정하지 마라. 몇 주 전에 나는 대답을 읽고 있었다. 특히 uplight ...에 갔다. 그래서 나는 1.5 년 전에 질문에 답했다. 그리고 나는 물건을 기억하지 않았다. P –

+0

하하, 대단해! : P – kcoppock

+1

다음은 AnR이없는 이유입니다. https://groups.google.com/forum/?fromgroups=#!topic/android-developers/TfkPlN5b-ig (Mother Dianne Thank you) – Reno

1

오늘 같은 문제를 했어하지만 다른 원인과 해결 방법을 가지고 알고 보니 내가 여기에 정보를 추가 할 경우를 대비에 다른 사람을 도움이 될 결정했다. 내 onActivityResult() 방법 내에서 다음 줄을했기 때문에 내 경우 문제에
이 발생 하였다
android.os.Debug.waitForDebugger();
나는 그냥 라인을 삭제하고 문제가 사라졌다. 이 줄은 일반적으로 디버거를 OS 스레드와 동기화하는 데 사용되지만 어디에서나 사용해야하는 것은 아닙니다. 이상하게도 데스크탑에서 전화를 끊을 때까지는 문제가 나타나지 않습니다.

감사