Я программирую простую игру. 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.
Что я делаю неправильно, или это нормально для игр?
Вы вызываете onDrawcanvas) или render (canvas)? Предполагается, что onDraw() будет использовать аппаратные экранные буферы, поэтому это не чисто процессорный цикл. Взгляните на: http://stackoverflow.com/questions/6970987/android-surfaceview-displays-blank-when-locked-canvas-is-not-null – garlicman
Что касается USB-зарядки, S2 - это USB 2.0, перезарядка с ноутбука/рабочего стола. В USB-кабеле есть выделенная 5-вольтовая линия, но спецификация была выпущена в 2000 году для устройств в то время. Ваш S2 попытается привлечь больше, чем может, для CPU, WIFI, Bluetooth, экрана и т. Д. ... все включено. Кроме того, ваш S2 старый, и батарея, скорее всего, не может полностью зарядиться. У устройств Android обычно возникают проблемы с зарядкой. Мой Google Nexus 10 не может заряжаться быстрее, чем WIFI просматривает веб-страницы. Все, что я могу предложить, это сравнить скорость слива с 3DS или PSP Vita. (3 часа с включенным WIFI) – garlicman