2013-01-14 45 views
2

我有一個應用程序,它會在屏幕上顯示ProgressBar時凍結。當我增加ProgressBar的大小或當我使用View而不是ProgressBar時,它不會凍結。ProgressBar和整個應用程序凍結

在凍結的logcat日誌:

D/OpenGLRenderer(13909): GL Error after OpenGLRenderer::setupDrawMesh- glVertexAttribPointer OpenGLRenderer: 1285 
D/OpenGLRenderer(13909): GL Error after OpenGLRenderer::setupDrawMesh- glVertexAttribPointer OpenGLRenderer: 1285 
D/OpenGLRenderer(13909): GL Error after OpenGLRenderer::drawTextureMesh()- glDrawArrays OpenGLRenderer: 1285 
D/OpenGLRenderer(13909): GL Error after OpenGLRenderer::setupDrawMesh- glDisableVertexAttribArray OpenGLRenderer: 1285 
+2

您正在從ui線程運行。您必須使用線程。在電話,否則我會更有幫助。 – Colton

+0

我試圖在另一個線程上完成它,但繪圖是由UI線程完成的,我不知道是否有另一個要做。 – user1977578

+0

@ user1977578 Sparksis是對的。要在UI線程中繪製,您可以使用'Handler's,'AsyncTask'或'Activity.runOnUiThread()'方法。 – andr

回答

-1

您應該使用其他線程的計算,你需要在你的UI線程更新進度條。你需要在你的引擎和你的UI線程之間有一個共享變量,它將被引擎線程刷新,並且UI線程應該定期檢查變化。

或者,您可以將進度條的對象傳遞給引擎線程,該線程可以調用方法來更新進度條的狀態。

1

您可以也應該使用AsyncTask來完成UI線程所需的任務。您會看到許多示例,其中ProgressDialog顯示並隱藏在AsyncTask的各種不同生命週期方法中。

下面是一個很好的例子(有很多):Android AsyncTask Progress bar

+0

我正在使用progressbar而不是進度對話框。我如何在我的情況下使用它?我怎樣才能使它在另一個線程上繪製? – user1977578