2013-06-23 6 views
1

Я программирую простую игру. Draw/Update go бросить в реальном времени, поэтому процессор всегда загружен. Резьба выглядит так:Android игры, расход батареи очень высокая


    @Override 
    public void run() { 
     while (true) { 
      if (!mRun) { 
       try { 
        Thread.sleep(100); 
       } catch (InterruptedException e) {}; 
      } else { 
       Canvas c = null; 
       try { 
        c = mSurfaceHolder.lockCanvas(null); 
        synchronized (mSurfaceHolder) { 
         ..update game objects.. 
         if (canvas != null) { 
         ..draw to canvas... 
         } 
        } 
       } finally { 
        if (c != null) { 
         mSurfaceHolder.unlockCanvasAndPost(c); 
        } 
       } 
      }     
     } 
    } 

Проблема в том, что работа так, что приложение ест батарею. На моем Galaxy S2 он стекает быстрее, чем заряды в тот же момент, что и на ПК USB.

Что я делаю неправильно, или это нормально для игр?

+0

Вы вызываете onDrawcanvas) или render (canvas)? Предполагается, что onDraw() будет использовать аппаратные экранные буферы, поэтому это не чисто процессорный цикл. Взгляните на: http://stackoverflow.com/questions/6970987/android-surfaceview-displays-blank-when-locked-canvas-is-not-null – garlicman

+0

Что касается USB-зарядки, S2 - это USB 2.0, перезарядка с ноутбука/рабочего стола. В USB-кабеле есть выделенная 5-вольтовая линия, но спецификация была выпущена в 2000 году для устройств в то время. Ваш S2 попытается привлечь больше, чем может, для CPU, WIFI, Bluetooth, экрана и т. Д. ... все включено. Кроме того, ваш S2 старый, и батарея, скорее всего, не может полностью зарядиться. У устройств Android обычно возникают проблемы с зарядкой. Мой Google Nexus 10 не может заряжаться быстрее, чем WIFI просматривает веб-страницы. Все, что я могу предложить, это сравнить скорость слива с 3DS или PSP Vita. (3 часа с включенным WIFI) – garlicman

ответ

3

Зарядка с USB-порта на ПК будет очень медленной (USB также передает данные, а не только питание). Я бы подумал, что в игре можно использовать больше заряда, чем при приеме на USB-порт ПК.

+0

Я бы сказал, что Angry Birds/Bad Piggies не так дорого, не так ли? – Vadim

+0

USB будет передавать данные только в случае необходимости и в большинстве случаев при зарядке через USB, передача данных (если вы не используете adb для параллельных операций). Но ток заряда от USB обычно ниже, чем настенный заряд. –

1

Ток разряда от телефона будет зависеть от того, что он делает (особенно, что делают приложения). Обычно экран потребляет большую часть мощности, а цвет приложения (белый против черного - большая разница), а уровни яркости оказывают большое влияние. И если вы одновременно потребляете процессор (и, может быть, данные), они наверняка повлияют на него.

В наших тестах профилирования Angry Birds для питания мы видели, что он довольно хорошо себя ведет и не потребляет слишком много энергии (включая потребление ЦП). А также они обычно используют слегка более темные цвета. И их потребление данных, как правило, происходит только тогда, когда есть реклама (которая является крупным потребителем, и мы заметили, что они увеличились в последнее время точно).

Я бы поинтересовался, какие компоненты вашего приложения сливают аккумулятор и посмотрите, можно ли его оптимизировать. Если вам интересно, попробуйте инструменты для профилирования, такие как Little Eye (отказ от ответственности: я являюсь соучредителем компании, которая строит этот инструмент), чтобы узнать, какая часть (или использование компонентов h/w) вашего приложения разряжает аккумулятор.

+0

Спасибо. Но нормально ли для игры загружать процессор с бесконечным циклом? – Vadim

+0

Это было бы очень плохо. Поскольку система (даже когда говорят, что дисплей выключен), может никогда не поспать. Поэтому в идеале выполнение непрерывного цикла (который не блокирует или скорее ждет) не будет оптимальной задачей. –

+0

Будучи отключенным, он перейдет в спящий режим, потому что поток будет остановлен, когда экран выключен. На самом деле, я не уверен насчет ожиданий. Как часто и сколько времени ждать? Возможно, мне нужно посмотреть на фактический FPS и не позволять ему слишком много (используя ожидания) – Vadim