2011-04-22 205 views
1

我有擴展線程的類,並且在其中的一個方法中,我添加了Thread.sleep(5000)來等待某些內容,並且我從此線程開始的onCreate()這樣的一個線程中的Thread.sleep()使UI線程也進入睡眠狀態

public void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.main); 

MyClass mc = MyClass(); 
mc.start(); 
mc.join(); 
// do something 

} 

,並在MyClass的運行梅索德我做這樣的事情

Class MyClass extends Thread { 

public void run() { 
sleep(15000); 
// do something 
} 

} 

,我看到的UI線程休眠5秒太多,如果我運行MyClass的線程(這個問題調用睡眠方法),爲什麼會發生這種情況?

+3

這是不可能的。代碼中必須有其他內容導致延遲。 – rajath 2011-04-22 17:20:08

+0

'mc.Start()'是什麼?它應該是'mc.start()' – Zombies 2011-04-22 17:23:36

+0

@Rajath DSouza:我也在開始之後加入(我將它添加到代碼中)。 @殭屍:錯字固定。 – Jimmy 2011-04-22 17:33:51

回答

5

嗯,這裏是你的問題:

mc.join(); 

這使得當前線程(即UI)等到由mc代表的線程完成run()方法。無論如何,你想用join()來實現什麼。

+0

是的,這正是問題所在。我發誓,當我第一次看這裏時,我沒有看到。加入。代碼被粘貼到這裏的方式,如果你的代碼在不同的線程中運行,沒有意義的.start後跟.join – 2011-04-22 17:52:21

+0

你的權利,我專注於睡眠,我忘記了加入會阻止它〜我試圖做東西onCreate線程完成運行時,你有什麼想法,我怎麼能沒有加入呢? – Jimmy 2011-04-22 18:08:14

+0

@Mike dg:你的權利,如果你看到我說我添加它的問題下的評論。 – Jimmy 2011-04-22 18:10:13

0

你正在做runOnUIThread或在MyClass線程中使用處理程序嗎?

如果你評論新的線程,一切工作正常嗎?

+0

沒有即時通訊不做runOnUIThread或使用處理程序。如果我評論線程它工作正常。 – Jimmy 2011-04-22 17:40:30