Тестирование моей игры на более медленном устройстве (Orange San Francisco aka ZTE Blade), и я получаю ужасающую частоту кадров.
Я поместил некоторый отладочный код в цикл отрисовки и обнаружил, что следующая строка принимаетсвыше 100 мс:
c = mSurfaceHolder.lockCanvas();
Кто-нибудь еще видел такое поведение?Я временно заменил SurfaceView, расширив View и реализовав onDraw (), и получил намного лучшую частоту кадров.
Хотя в целом SurfaceView намного быстрее в моем HTC Desire.Я подозреваю, что это может быть проблема Android 2.1.Я обдумываю возможность рутирования телефона и обновления его до 2.2, если это возможно, но я действительно хотел, чтобы устройство работало на 2.1, чтобы в долгосрочной перспективе это могло привести к обратным результатам.
** обновление **
Я работал над этим еще немного и обнаружил еще несколько загадочных аспектов.
Я рутировал телефон и установил 2.2, и проблема все еще возникает.При первом запуске приложения lockCanvas работает как положено (0-1 мс).Затем в какой-то момент во время моей инициализации lockCanvas внезапно начинает принимать около 100 мс.
Возможно, стоит указать, что я загружаю свои активы в асинхронной задаче, чтобы я мог отобразить экран загрузки.
Несмотря на все мои усилия, чтобы определить, что на самом деле делает программа, когда происходит медлительность, я не смог этого сделать.Фактически, когда я запускаю его в режиме отладки и в один шаг, он работает быстро!
Теперь я обнаружил, что если я добавлю задержку в конструктор моего SurfaceView (около 10 секунд), медлительность непроисходит, и все работает нормально.
Однако, если вы нажмете Домой, а затем переключитесь обратно, медлительность вернется.
Я в значительной степени нахожусь в конце своей привязи по этой глупой нелогичной проблеме!У меня есть разум, чтобы отнести это к конкретной проблеме устройства.
Я чувствую, что это может быть связано с использованием памяти.Может быть, что-то поменяется местами, и это влияет на видео-плейер?
По крайней мере, меня интересуют теории.