那麼你這樣做,凍結UI線程,這樣一種方法是創建一個新的線程,並使用處理器回發到UI線程,所以它不堵塞並可繼續繪製。
例如:
final ProgressBar pbar = (ProgressBar) findViewById(R.id.bar); // Final so we can access it from the other thread
pbar.setVisibility(View.VISIBLE);
// Create a Handler instance on the main thread
Handler handler = new Handler();
// Create and start a new Thread
new Thread(new Runnable() {
public void run() {
try{
Thread.sleep(5000);
}
catch (Exception e) { } // Just catch the InterruptedException
// Now we use the Handler to post back to the main thread
handler.post(new Runnable() {
public void run() {
// Set the View's visibility back on the main UI Thread
pbar.setVisibility(View.INVISIBLE);
}
});
}
}).start();
而且,正如克里斯如下建議,你應該從處理程序中刪除任何未決的消息時,該活動被關閉,以避免試圖運行在投稿文/ Runnable的時候遇到了一個IllegalStateException在不再存在的活動:
@Override
public void onDestroy() {
handler.removeCallbacksAndMessages(null);
super.onDestroy();
}
請務必檢查您從處理程序中刪除回調在活動的onStop – Chris
也,爲什麼你剛纔不叫handler.postDelayed(新的Runnable())。創建單獨的線程會增加很多管理費用和更多內容。 – Chris
我想用postDelayed的,但它並沒有真正做太多解釋線程,而且他正在經歷的UI的阻塞。當然,我可以把短片放在他身上,但從長遠來看這不會有幫助。作爲去除回調,沒錯,你應該和我即將更新帖子雅〜 – Guardanis