2011-11-27 40 views
4

短版本

是允許的,還是我需要使用UI線程?Android - 非UI線程的外屏繪圖

編輯:在官方的android文檔中的地方引用將是理想的。

龍版

Android的文件明確指出它不能夠給「從UI線程外部訪問Android的UI工具包」。

在另一方面,創建從工作線程位圖對象似乎是允許的,至少它在示例代碼正在做:在「UI工具包」的 http://developer.android.com/guide/topics/fundamentals/processes-and-threads.html 顯然,Bitmap類不被認爲是部分儘可能線程有關。

我有一段代碼似乎從非UI線程調用時工作。它涉及使用Bitmap.createBitmap(int,int,Bitmap.Config),新的Canvas(位圖),Typeface.create()和文本繪圖。我的代碼沒有引用任何View對象。

有人可以指向一段文件,說我可以從後臺線程做這些事情嗎?或者這樣做會導致隨機崩潰?

回答

2

UI工具包是指用戶界面,如按鈕,標籤,列表視圖,等等由Google提供。您不能從非ui線程訪問它們,主要是因爲它們不是線程安全的。

你在做什麼不是在UI工具包上,而是在低級Canvas上允許(實際上應該允許)從非UI線程訪問。這種機制一直用於遊戲開發。所以我相信你是安全的。

+0

我已經添加了更強大的需求以獲取該問題的文檔參考。如果我沒有得到任何答案,我會接受這個答案... – wolfgang

+0

@wolfgang本文介紹如何使用線程和畫布? http://goltermann.cc/2010/03/android-game-project-basics-of-threads-and-canvas/ –

+0

該文章似乎只是通知主線程使「遊戲」視圖無效。 – wolfgang

0

更新視圖必須在UI線程上進行,或者從具有post函數的遠程線程(基本上告訴UI線程遠程線程想要完成的事情)進行,這是View類的一部分。

0

它應該是合法的,因爲位圖在你繪製它們之前只是自己坐在內存中。

我期待到遊戲開發中,似乎有一些線程更新UI療法太(使用類似的內存渲染做的技術)

+0

它*應該是,但是再次,android的字體渲染代碼可能使用一些共享的數據結構。它們是線程安全的嗎? – wolfgang

+0

不太可能,我們發現這個代碼甚至不嘗試成爲線程安全的:http://stackoverflow.com/questions/8288155/android-offscreen-drawing-from-non-ui-thread –