2012-11-01 116 views
7

我正在開發Android三星Galaxy TAB 10.1。我正式更新到4.0.4版本後經常會出現錯誤:GetBufferLock超時線程

11-01 17:04:35.382: E/gralloc(11657): GetBufferLock timed out for thread 11657 buffer 0x55 usage 0x33 LockState 1 

和設備立即重新啓動。如果我正在調試我自己的應用程序,這個錯誤完全是隨機的。

有什麼建議嗎?

P.S.

我只有一個無限循環的油漆:

public void run() { 
    Canvas canvas = null; 

    while (true) { 
     try { 
      Thread.sleep(50); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 

     try { 
      synchronized (lock) { 
       if (!invalidated) 
        continue; 
      } 

      canvas = mHolder.lockCanvas(); 

      synchronized (mHolder) { 
       onDraw(canvas); 
      } 

      synchronized (lock) { 
       invalidated = false; 
      } 
     } finally { 
      if (canvas != null) { 
       mHolder.unlockCanvasAndPost(canvas); 
       canvas = null; 
      } 
     } 

     synchronized (lock) { 
      if (painter == null) 
       break; 
     } 
    } 
} 
+0

你使用自定義ROM或其他Android系統,或從三星常規嗎?另外,當平板電腦崩潰時,你在做什麼? – Guian

+0

我使用的是三星的普通產品。我看到的只有一件事,只會使我的可調試應用程序崩潰。 – neworld

+0

你的意思是它只在運行你的應用程序時崩潰?你在做一些沉重的顯示嗎? – Guian

回答

1

我想什麼是錯的這個GPU的內存,出現此錯誤是你在做一些繁重的圖形顯示?

如果不是......也許另一個應用程序是。

這是值得檢查的應用與沉重的GPU消耗(可能是沉重的動態壁紙?)並將其刪除。那麼重啓應該可以解決這個問題

也只是知道,你永遠也不會寫:

while (true) { 
} 

至少增加行駛標誌:

while(running){ 
} 

,您可以設置運行的應用停止錯誤。

+0

我的應用程序不會對圖形做任何特殊處理,只是定期查看重繪。壁紙是靜態的,沒有小部件。你能告訴我如何確定GPU內存問題嗎? – neworld

0

看起來像一個需要被其他線程訪問的塊被應用程序無限使用。你在paint方法中運行了無限循環嗎?

+0

我加了我唯一的一個無限循環。但是應用程序在活動中崩潰,我沒有使用自定義視圖。我很確定只有一個螺紋在這個表面支架上重新粉刷。我添加了我的代碼來爲你提問。 – neworld