2017-09-15 66 views
2

嗨我正在嘗試使用SurfaceView和線程以便在畫布上繪製得更快。到目前爲止,我已經完成了通過簡單地擴展View類並繪製onDraw方法來繪製畫布。另外,如果用戶通過鍵盤輸入(通過將活動的鍵碼傳遞到自定義視圖),我可以重新繪製畫布。在單獨線程的畫布上繪圖Android

問題是我被困在多線程中,我已經用SurfaceView替換了View類並實現了Runnable(後面的this教程)。但是如果發生鍵輸入,我無法傳遞鍵碼。另外,如果我在自定義視圖上調用invalidate()方法,則什麼也不會發生。從教程代碼和礦唯一的區別是,我已經添加到while循環這條線的端:

retry = false; 

爲了停止附圖之後執行的線程。並在每次點擊活動這一行後添加,以便我可以重新繪製所有內容。

view.resume(); 

問題: - 視圖不壞的關鍵事件,並沒有引入新的圖像(不知道爲什麼)

  • ,如果我通過調用的Thread.join()停止線;方法,將CustomView內的其他對象留在堆內存中,否則它們會被銷燬?

  • 如何讓這個應用程序在啓動時自動執行,然後在點擊時執行?

  • 爲什麼invalidate方法不清除畫布,如果我顯式調用view.resume()之前?

p.s.我需要發佈代碼示例,請讓我知道,我會附上測試應用程序的git回購。

感謝

回答

0

在Android中你有,你可以實現發送郵件的處理程序類,創建它要接收和執行的handleMessage,您使用的sendMessage其他線程的線程內。

另一件事,對於布爾標誌和多線程,您應該使用關鍵字volatile來進行某些虛擬機優化。

volatile boolean retry = false; 
+0

我添加了volatile關鍵字,但沒有任何改變。謝謝 – hogar

+0

發佈您的完整代碼 –