2014-08-28 2 views
1

У меня есть приложение, которое использует SurfaceView, чтобы нарисовать анимацию как можно быстрее. Это почти идеально, за исключением того, что время от времени анимация замерзает в течение короткого периода времени. Это короткое время длится примерно 10 мс, чего не так много, но достаточно велико, чтобы быть заметным для пользователя.Куча пространства в приложении для Android

Я видел, что эти зависания вызваны изменениями в области кучи, которые запускаются сборщиком мусора. Добавление android:largeHeap="true" в манифест моего приложения не решило проблему.

Кто-нибудь знает, как я мог избавиться от этой досадной проблемы?

ответ

1

Это сборщик мусора пытается высвободить некоторые ресурсы. Вам нужно будет увидеть logcat - там будет видно.

Я предлагаю оптимизировать использование памяти (уменьшить размеры растрового изображения или изменить схему загрузки) или (если это возможно) найти некоторый интервал, при котором ничто не интенсивно анимируется, и делать System.gc() в этот момент, чтобы скрыть замораживание от пользователя.

+0

Я уже знал причину зависаний, потому что я уже видел связанные сообщения в журнале cat. Как вы предположили, я попытаюсь вызвать 'System.gc()' самостоятельно ... – VD63

0

Кажется, что Android не был достаточно быстрым, чтобы вырастить кучу пространства для приложения.

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

Вам просто нужно установить largeHeap="true" на прикладном метку вашего AndroidManifest.xml

+0

AS, указанный в моем вопросе, я уже пытался использовать 'largeHeap =" true "', но без успеха ... – VD63

Смежные вопросы