Причины, по которым мое Android-приложение постоянно зависало на моем телефоне, но не на эмуляторе - PullRequest
4 голосов
/ 31 августа 2010

У меня есть приложение, которое использует довольно много графики.

Когда я неоднократно открываю и закрываю свое приложение на моем эмуляторе (1.5 - 2.2), оно работает нормально, и, проверяя кучу, я вижу всеочищается и gc'd правильно.

Однако, когда я запускаю свое приложение на телефоне HTC Aria (2.1), приложение вылетает каждый раз, когда я пытаюсь открыть его снова.Когда я смотрю на кучу, я вижу, что объекты НЕ очищаются, как в эмуляторе.

Кто-нибудь знает, почему такое поведение может происходить?Я попробовал это на другом HTC Aria (друзья), и он сломался так же, как и на моем телефоне, так что я думаю, что он не просто изолирован от моего конкретного телефона.

Любые мысли или идеи будут очень благодарны за то, почемувсе исправляется на эмуляторе, но не на моем телефоне.Стоит отметить, что у меня ДЕЙСТВИТЕЛЬНО было, что он работал и нормально работал на моем телефоне несколько дней назад, и я не сильно изменился, а теперь он не работает на моем телефоне, так что для меня это немного загадка.

Спасибо!

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

1 Ответ

2 голосов
/ 31 августа 2010

У вас есть несколько эмуляторов, все они запускают только это приложение, закрывают его и запускают снова. На вашем Android-устройстве одновременно запущено несколько процессов, таких как фоновая синхронизация, уведомление Facebook, уведомление Twitter, синхронизация календаря, синхронизация контактов и т. П.

Один из способов взглянуть на это - попытаться имитировать состояние устройства Android на разных эмуляторах и посмотреть, можно ли получить ту же ошибку на эмуляторах. Используйте некоторые приложения, которые синхронизируются в фоновом режиме, и другие, которые используют много памяти. Затем у вас есть среда тестирования, которая имитирует реальный мир, и вы можете изменить свое приложение до состояния, при котором оно не падает. Возможно, уменьшите размер изображения до максимально возможного, чтобы облегчить использование памяти.

Помните, что вы никогда не сможете заставить Garbace Collector запускаться. Вы можете только сказать системе, что можно собрать этот мусор.

...