Android游戏,电池使用率非常高

Android游戏,电池使用率非常高,android,battery,2d-games,Android,Battery,2d Games,我正在编写一个简单的游戏。绘制/更新go-throw实时模型,因此CPU总是高负载。线程看起来是这样的: @Override public void run() { while (true) { if (!mRun) { try { Thread.sleep(100); } catch (InterruptedException

我正在编写一个简单的游戏。绘制/更新go-throw实时模型,因此CPU总是高负载。线程看起来是这样的:


    @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上,它的耗电速度比使用PC USB时的充电速度还要快


我做错了什么,还是玩游戏没问题?

从电脑的USB端口充电会非常慢(USB也在传输数据,而不仅仅是电源)。我认为游戏使用的电量比连接到PC USB端口时收到的电量多是可以的。

从PC的USB端口充电会非常慢(USB也传输数据,而不仅仅是电源)。我认为,当连接到PC USB端口时,游戏使用的电量比接收的电量多是可以的。

手机的放电电流取决于手机的功能(尤其是应用程序的功能)。通常情况下,屏幕耗电量很大,应用程序的颜色(白色和黑色的差别很大)和亮度水平会产生很大的影响。如果您同时消耗CPU(可能还有数据),它们肯定会产生影响

在我们对《愤怒的小鸟》的性能测试中,我们看到它表现得非常好,并且不会消耗太多的电源(包括CPU消耗)。而且他们通常也使用稍微深一点的颜色。他们的数据消费通常只有在有广告的情况下才会出现(这是一个巨大的消费者,我们注意到他们最近确实在增加)


我会检查你的应用程序的哪些组件正在耗尽电池电量,看看它是否可以优化。如果您感兴趣,请尝试使用Little Eye(免责声明:我是构建此工具的公司的联合创始人)之类的评测工具,查看您的应用程序的哪个部分(或h/w组件使用情况)正在耗尽电池电量

手机的放电电流取决于手机的功能(尤其是应用程序的功能)。通常情况下,屏幕耗电量很大,应用程序的颜色(白色和黑色的差别很大)和亮度水平会产生很大的影响。如果您同时消耗CPU(可能还有数据),它们肯定会产生影响

在我们对《愤怒的小鸟》的性能测试中,我们看到它表现得非常好,并且不会消耗太多的电源(包括CPU消耗)。而且他们通常也使用稍微深一点的颜色。他们的数据消费通常只有在有广告的情况下才会出现(这是一个巨大的消费者,我们注意到他们最近确实在增加)


我会检查你的应用程序的哪些组件正在耗尽电池电量,看看它是否可以优化。如果您感兴趣,请尝试使用Little Eye(免责声明:我是构建此工具的公司的联合创始人)之类的评测工具,查看您的应用程序的哪个部分(或h/w组件使用情况)正在耗尽电池电量

我想说的是,愤怒的小鸟/坏小猪不会这么大,不是吗?USB只在需要时传输数据,在大多数情况下,通过USB充电时,没有数据传输(除非使用adb并行执行某些操作)。但USB的充电电流通常低于壁挂式充电。我想说愤怒的小鸟/坏小猪不会这么大,不是吗?USB只在需要时传输数据,在大多数情况下,通过USB充电时,没有数据传输(除非使用adb并行执行某些操作)。但是USB的充电电流通常低于壁挂式充电。谢谢。但游戏可以用无休止的循环来加载CPU吗?这实际上是非常糟糕的。因为系统(即使在显示器关闭的情况下)可能永远不会进入睡眠状态。所以理想情况下,运行一个连续循环(不阻塞或等待)不是一个最佳选择。关闭它将进入睡眠状态,因为当屏幕关闭时线程将停止。事实上,我不确定等待。多久一次,多久一次?也许我必须考虑实际的FPS,不要让它太多(使用等待),因为不是所有的线程都会停止。只有UI线程将停止,或者更确切地说,不会向线程提供任何事件,因此将阻塞/睡眠。但是,如果您有一个工作线程正在后台执行某些工作,它将继续运行。同样,你可以使用像Little Eye这样的工具(很抱歉继续销售,但觉得它在这里很重要)来验证这个理论。您可以在关闭屏幕后查看CPU活动是否停止。谢谢。但游戏可以用无休止的循环来加载CPU吗?这实际上是非常糟糕的。因为系统(即使在显示器关闭的情况下)可能永远不会进入睡眠状态。所以理想情况下,运行一个连续循环(不阻塞或等待)不是一个最佳选择。关闭它将进入睡眠状态,因为当屏幕关闭时线程将停止。事实上,我不确定等待。多久一次,多久一次?也许我必须考虑实际的FPS,不要让它太多(使用等待),因为不是所有的线程都会停止。只有UI线程将停止,或者更确切地说,不会向线程提供任何事件,因此将阻塞/睡眠。但是,如果您有一个工作线程正在后台执行某些工作,它将继续运行。同样,你可以使用像Little Eye这样的工具(很抱歉继续销售,但觉得它在这里很重要)来验证这个理论。关闭屏幕后,您可以查看CPU活动是否停止。您是调用onDrawcanvas(画布)还是render(画布)?onDraw()应该利用硬件屏幕缓冲区,因此它不是一个纯粹的CPU硬循环。看一看:至于USB充电,S2是USB 2.0,您正在使用笔记本电脑/台式机充电。USB电缆中有一条专用的5v线,但该规范于2000年发布,当时用于设备。您的S2将尝试为CPU、WIFI、蓝牙、屏幕等绘制更多的图像。。。我们都开着。加上你的S2是旧的,电池是旧的