Время ожидания активности для ActivityRecord

Поэтому у меня есть странная проблема, и я не совсем уверен, какую информацию я должен предоставить, но я сделаю все возможное – просто дайте мне знать, если мне нужно добавить дополнительную информацию. У меня возникла проблема: когда я закончу свою Activity и вернусь к предыдущему Activity (или запустив его с помощью нового Intent – проблема, похоже, сосредоточена на завершении Activity ), производительность пользовательского интерфейса резко падает примерно на шесть или семь секунд , Затем возвращается к норме.

Из LogCat это предупреждение появляется последовательно:

 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} 

Как только активность истекает, производительность пользовательского интерфейса возвращается к норме. До этого момента он очень вялый. У меня нет кода, который, как я знаю, может блокировать основной поток, и я даже зашел так далеко, чтобы прокомментировать весь onPause() метод onPause() чтобы понять, не имеет ли значения, и это не так.

Activity не порождает фоновые потоки, не выполняет никакой сетевой активности, единственный доступ к SharedPreferences к SharedPreferences он имеет доступ, – это некоторый доступ к SharedPreferences . Предыдущие вопросы, которые я смог найти, – это тайм-ауты простоя для HistoryRecord , а не ActivityRecord .

Любые идеи, что может вызвать это? Или как я могу определить, что блокирует поток пользовательского интерфейса, если это то, что происходит?

EDIT : Хорошо, просто попробовал комментировать все, кроме super.onCreate () и setContentView () – проблема по-прежнему сохраняется. Это не происходит ни с какими другими действиями, кроме этого, но в этом нет НИЧЕГО . : /

Solutions Collecting From Web of "Время ожидания активности для ActivityRecord"

О, боже. Одна из тех вещей, которые довольно трудно диагностировать вне проб и ошибок, но я понял это. Для справки, если кто-то еще имеет эту проблему, она сводится к пользовательскому виду в моем макете. Я добавил 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); } } 

Это решение довольно иронично, учитывая, что мой второй самый высокий рейтинг ответа на StackOverflow касается именно этого.

вздох

Сегодня у меня была такая же проблема, но, как оказалось, у меня другая причина и решение, я решил добавить сюда информацию на всякий случай, если это может помочь кому-то другому.
В моем случае проблема была вызвана тем, что у меня была следующая строка внутри моего onActivityResult() :
android.os.Debug.waitForDebugger();
Я просто удалил строку, и проблема исчезла. Эта строка обычно используется для синхронизации отладчика с потоками ОС, но я просто решил, что его нельзя использовать нигде. Как ни странно, проблема не появится, пока я не отключу свой телефон от рабочего стола.

С уважением