2013-06-23 57 views
1

我是編程簡單的遊戲。繪製/更新會拋出實時模型,所以CPU總是高負載。線程看起來是這樣的: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上,它的耗盡速度比在PC USB上同時充電要快。

我做錯了什麼,或者遊戲沒關係?

+0

你打電話onDrawcanvas)或渲染(畫布)? onDraw()應該利用硬件屏幕緩衝區,所以它不是純粹的CPU硬循環。看看:http://stackoverflow.com/questions/6970987/android-surfaceview-displays-blank-when-locked-canvas-is-not-null – garlicman

+0

至於USB充電,S2是USB 2.0,從筆記本電腦/臺式機充電。 USB電纜中有一條專用的5v線,但該規範是在2000年針對設備發佈的。您的S2會嘗試爲CPU,WIFI,藍牙,屏幕等等提供更多功能。再加上你的S2是舊的,電池可能無法完全充電了。 Android設備通常存在收費問題。我的Google Nexus 10不能比WIFI更快地收費,網頁瀏覽將耗盡。我可以建議的是你比較你的排水率與3DS或PSP Vita。 (使用WIFI 3小時) – garlicman

回答

3

從您的PC的USB端口充電將會非常緩慢(USB也正在傳輸數據,而不僅僅是電源)。我認爲遊戲使用比連接到PC USB端口時更多的電量是可以的。

+0

我會說憤怒的小鳥/不喜歡這麼多,不是嗎? – Vadim

+0

USB只會在需要時傳輸數據,並且在大多數情況下,通過USB充電時,沒有數據傳輸(除非使用adb並行執行一些操作)。但USB的充電電流通常低於壁掛式充電。 –

1

手機的放電電流取決於它在做什麼(尤其是應用程序在做什麼)。通常屏幕消耗很大一部分能量,而應用程序的顏色(白色與黑色差別很大),亮度級別會產生很大影響。如果你同時使用CPU(也可能是數據),它們肯定會產生影響。

在我們對憤怒的小鳥進行動力測試的測試中,我們看到它的表現非常好,並且不會消耗太多的電量(包括CPU消耗)。而且它們通常也使用稍暗的顏色。而他們的數據消費通常只有在有廣告的時候(這是一個很大的消費者,我們注意到他們近期確實已經增加了)。

我會檢查你的應用的哪些組件正在耗盡電池,看看它是否可以優化。如果您有興趣,請嘗試使用像Little Eye這樣的分析工具(免責聲明:我是構建此工具的公司的聯合創始人),以查看應用程序的哪個部分(或h/w組件使用情況)正在耗盡電池電量。

+0

謝謝。但是遊戲加載無限循環的CPU是否可行? – Vadim

+0

這實際上會很糟糕。因爲系統(即使在關閉顯示器的情況下)可能永遠不會睡覺。因此,理想情況下,運行連續循環(不會阻塞或等待)並不是最佳選擇。 –

+0

正在關閉它將進入睡眠狀態,因爲屏幕關閉時線程將停止。其實,我不確定等待。它等待的時間和時間有多長?也許我必須看看實際的FPS,不要讓它太多(使用等待) – Vadim