2013-04-30 6 views
1

Я разработал приложение, которое используется очень интенсивно в течение нескольких часов, делает много вызовов веб-сервисов, использует множество асинхронных задач и выполняет множество операций в базе данных sqlite. Проблема в том, что в случайном порядке дисплей тускнеет, как будто он идет в режиме энергосбережения (это происходит и при зарядке аккумулятора), и пользовательский интерфейс не отвечает вообще (журнал, записанный для нажатия кнопок, не записывается). Если я нажимаю кнопку «домой», телефон работает правильно, и каждое приложение работает нормально. Если я вернусь в свое приложение, дисплей снова погаснет. Я действительно не имею ни малейшего представления о причине такого поведения, я действительно надеюсь, что некоторые из вас помогут мне, потому что мой босс хочет объяснения, потому что клиент хочет получить ответ.android app touch unrensponsiveness

EDIT: Я заметил, что когда проблема возникает, это сразу после разблокировки экрана, поэтому оно должно иметь какое-то отношение к возобновлению приложения, но я действительно не знаю, что вызывает это поведение.

+1

Мне кажется, вам просто нужно приобрести wakelock, чтобы экран устройства не выходил из строя после бездействия. – FoamyGuy

+0

Что вы подразумеваете под «тайм-аутом экрана после бездействия»? – Apperside

+0

Если вы включите экран и оставите свое устройство сидеть в течение нескольких секунд, не делая ничего на нем, экран погаснет, а затем в какой-то момент отключится. Как долго это требуется, это настройка пользователя. Если вы приобрели wakelock в 'onStart()', а затем отпустите его в 'onStop()', это не позволит устройству «заснуть» во время работы вашего приложения. – FoamyGuy

ответ

1

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

+2

в том случае, если я ошибаюсь, делая слишком много работы в пользовательском интерфейсе (но я не думаю, что я был очень осторожен в этом), разве я не должен получать сообщение ANR? потому что, когда проблема возникает, сообщение ANR не отображается, даже если я жду много минут – Apperside

0

Как говорит jaibatrik, это может быть вызвано чрезмерной работой в потоке пользовательского интерфейса, а не в фоновом потоке, AsyncTasks и т. Д. Один из способов добиться этого, который менее очевиден, - это если вся работа выполнена правильно фоновый поток (какого-то типа), но операция потока пользовательского интерфейса ожидает результата операции фонового потока.

0

вы можете предотвратить отображение тусклого вида. ll.setKeepScreenOn (true);

Вы должны обрабатывать onresume(), onpause() & co. Возможно, вы создаете память в своих фоновых задачах или службах.