2011-04-22 180 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