Анимация Android вызывает запуск «Время простоя активности для записи истории» при запуске - PullRequest
3 голосов
/ 17 августа 2011

Я искал ответ на этот вопрос, и хотя я могу найти других, которые видели те же записи в журнале, ни один из следов не похож на мой.

По сути, я запускаю бесконечно повторяющуюся анимацию, как часть моей деятельности. Экран отображается правильно, реагирует на все сенсорные вводы, но я получаю следующие записи в моей logcat:

08-17 16: 03: 25.910: ПРЕДУПРЕЖДЕНИЕ / ActivityManager (110): истекло время ожидания запуска, отказавшись от блокировки пробуждения! 08-17 16: 03: 25.972: WARN / ActivityManager (110): Тайм-аут простоя активности для HistoryRecord {4057ad58 com.companyname.dm/.ui.activities.home.HomeActivity‹

Я читал посты, в которых говорится, что эти записи действительно являются предупреждениями, указывающими на то, что петлитель основного потока никогда не становился бездействующим, и это не проблема, если это предполагаемый режим работы. Однако, помимо того факта, что кажется чрезмерным, что небольшая повторяющаяся анимация (анимация масштабирования / преобразования / альфа, которая повторяется каждые 3 секунды) заполняет очередь сообщений, моя главная проблема заключается в том, что она препятствует созданию автоматических тестов. Мы пытаемся реализовать тест с использованием robotium, но тест никогда не запустится из-за простоя.

Не запуск анимации устранит эту проблему, но это гораздо более обходной путь, чем решение основной причины. Я пытаюсь понять, правильно ли я реализую свои анимации, действительно ли это просто ожидаемое поведение или есть способ обеспечить соединение, в котором будет установлен инструментарий / robotium.

Любое понимание будет с благодарностью! Благодарю.

Ответы [ 2 ]

0 голосов
/ 25 августа 2011

Код, который перерисовывается на экране, должен быть запущен в другом потоке, иначе основной поток пользовательского интерфейса никогда не будет простаивать, что вызывает проблему.

У вас могут возникнуть проблемы при взаимодействии с пользовательским интерфейсом из другого потока, для этого вам следует изучить AsyncTask , который фактически используется для вычисления / рисования индикаторов выполнения. Неприличное количество предупреждений наиболее вероятно, потому что предупреждения генерируются в любое время после X секунд, что ограничивается только проверками Android.

0 голосов
/ 24 августа 2011

Попробуйте запустить анимацию в новом потоке, если вы делаете слишком много вещей в методе onCreate, вы заблокируете UI-поток в Android, и это может привести к ANR (приложение не отвечает), если вы займете больше времени, чем5 секунд до возвращения.Запустив анимацию в новом потоке, onCreate вернется, и система будет счастлива.

new Thread(new Runnable() {
  public void run() {
    //start animation.
  }
}.start();
...