簡單描述一下,我建立了兩個類,一個類A,派生于SurfaceView,另一個類B,派生于Thread。我在類A中寫了一個repaint()繪圖方法,在類B中,也就是新建的執行緒中呼叫這個繪圖方法。我們知道,SurfaceView物件繪圖操作必須要鎖定同步才能獲取Canvas物件,所以在類A的repaint()方法中,我加了標準的兩行代碼來獲取Canvas:
SurfaceHolder holder=this.getHolder();
Canvas canvas=holder.lockCanvas();
問題就來了,如果我是直接運行,那么這個canvas始終無法獲取,總是回傳null。而假如除錯模式下,并且在類B也就是新建執行緒的的run()方法入口處位置下一個斷點,代碼跑到這里中斷后再點擊繼續運行,那么這兩行代碼就運行正常了,也總是能獲取正確的canvas。
這簡直就是邪門了,同樣的代碼,除錯模式下能正常作業,而正常運行模式反而錯誤。給人的感覺就是代碼必須在run()方法處掛起,才能獲取canvas,真是百思不得其解~~~
uj5u.com熱心網友回復:
剛才試驗了一下,證明了我的想法,也就是run()方法必須要暫停一下才能運行正常.我在run()里面增加了一行:Thread.sleep(320),就一切正常了, <310都不行.就有這么邪門.
不知道有沒有大牛能解釋這種神秘現象.
uj5u.com熱心網友回復:
你等A 創建完成后再運行Buj5u.com熱心網友回復:
你有沒想過,你的畫布都沒被初始化完成,就開始嘗試獲取它了?轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/32233.html
標籤:Android
