lockCanvas () очень медленно

Тестирую свою игру на более медленном устройстве (Orange San Francisco aka ZTE Blade) и получаю ужасающую частоту кадров.

Я поместил отладочный код в цикл отрисовки и обнаружил, что следующая строка занимает более 100 мс:

c = mSurfaceHolder.lockCanvas();

Кто-нибудь еще видел такое поведение? Я временно заменил Surfaceview, расширив View и реализовав onDraw (), и получил намного большую частоту кадров.

Хотя в целом SurfaceView намного быстрее на моем HTC Desire. Я подозреваю, что это может быть проблема с Android 2.1. Я подумываю о рутировании телефона и обновлении его до версии 2.2, если это возможно, но мне хотелось, чтобы устройство работало на версии 2.1, так что в долгосрочной перспективе это может оказаться контрпродуктивным.

** update **

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

Я рутировал телефон и установил 2.2, но проблема все еще возникает. При первом запуске приложения lockCanvas работает должным образом (0–1 мс). Затем в какой-то момент во время моей инициализации lockCanvas внезапно начинает занимать примерно 100 мс.

Возможно, стоит отметить, что я загружаю свои активы в задачу Async, чтобы я мог отобразить экран загрузки.

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

Теперь я обнаружил, что если я добавлю задержку в конструктор моего SurfaceView (около 10 секунд), медлительность не произойдет, и все работает нормально.

Однако, если вы нажмете Home, а затем переключитесь обратно, медлительность вернется.

Я почти исчерпал свою точку зрения на эту глупую нелогичную проблему! Я решил связать это с проблемой конкретного устройства.

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

Меня бы интересовали хотя бы теории.

14
задан Kevin 3 March 2011 в 14:00
поделиться