2013-01-23 4 views
2

Я попросил руководствоваться этим вопросом here. Я хочу знать, рекомендуется ли читать ресурсы андроидов (в папке res) в ui-thread или в игровой теме для простой игры (основанной на пробах лунного посадочного модуля). Я вижу на лунном посадочном объекте, что они выделяют ресурсы перед началом игрового цикла. Однако это не очень хорошо масштабируется, если ресурсов много. Ответ на мой предыдущий вопрос говорит, что нормально читать ресурсы, такие как растровые изображения в фоновом потоке. Теперь я хочу знать, правильно ли это делать.В игре для Android вы должны выделить память для ресурсов в нити или игровой нити

Альтернативной архитектурой будет время от времени запускать Run-to-u-thread и выделять ресурсы тогда.

Включается ли сбор мусора? Я не был уверен, какой поток GC работает. Но я предполагаю, что он работает в потоке, на котором был выделен объект.

ответ

1

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

В соответствии с док here,

BitmapFactory.decode * Методы, рассмотренные в нагрузке больших растровых изображений урока эффективно, не должны быть выполнены на основном потоке пользовательского интерфейса, если исходные данные считывание с диска или сетевого местоположения (или действительно любого источника , кроме памяти). Время, необходимое для загрузки данных, непредсказуемо и зависит от множества факторов (скорость чтения с диска или сети, размер изображения, мощность процессора и т. Д.). Если один из этих задач блокирует поток пользовательского интерфейса, система флага вашего приложения как не реагирует, и у пользователя есть возможность его закрытия (см. «Конструирование для реагирования» для получения дополнительной информации).

Таким образом, вы можете использовать отдельную нить для загрузки ресурсов на вышеуказанные условия.

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

Сбор мусора в демонах. Нить демона работает в фоновом режиме. Сбор мусора вступает в действие, когда объект становится пригодным для сбора мусора, т. Е. Когда нет доступных доступных ссылок или когда память становится слишком низкой. Используйте этот link, чтобы узнать об использовании распределений памяти отслеживания и о том, как избежать частых сборок мусора.

+0

Это отличный ответ. На основе этой документации вы, очевидно, должны использовать растровое изображение декодирования в фоновом потоке. Другая ссылка отлично подходит для объяснения подводных ловушек GC в Java (я программист на C++ днем, поэтому GC немного непонятен и привыкает). Настоящим я обещаю не выделять короткоживущие объекты в свою игровую нить. Я полагаю, что я мог бы также запросить систему GC, когда я знаю, для меня это приемлемо, например, когда появляется экран загрузки. Спасибо JJPA! – Nathan

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