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