beh*_*ooz 1 multithreading android sleep
我如何从for循环内部睡眠线程.
这就是我正在尝试但没有睡眠.
Thread newTread = new Thread() {
@Override
public void run() {
for (int x = 0; x < limit; x++) {
//some_code
try {
Thread.sleep(3000);
}
catch (Exception e){
e.getLocalizedMessage();
}
runOnUiThread(new Runnable() {
@Override
public void run() {
//someCode
}
});
}
}
};
newTread.start();
Run Code Online (Sandbox Code Playgroud)
我的代码有问题吗?
我已经将代码抛入我自己的项目中,并添加了一些调试代码.这是我使用的代码和我收到的输出.
Thread newTread = new Thread() {
@Override
public void run() {
for (int x = 0; x < 3; x++) {
Log.d("ThreadTest","1");
try {
Log.d("ThreadTest","2");
Thread.sleep(3000);
Log.d("ThreadTest", "3");
}
catch (Exception e){
e.printStackTrace();
}
Log.d("ThreadTest","4");
runOnUiThread(new Runnable() {
@Override
public void run() {
Log.d("ThreadTest","5");
}
});
}
}
};
newTread.start();
Run Code Online (Sandbox Code Playgroud)
11-04 08:23:38.920 11419-11452/nl.buroboot.danielvandenberg.bootsnelleinvoer D/ThreadTest:1 11-04 08:23:38.920 11419-11452/nl.buroboot.danielvandenberg.bootsnelleinvoer D/ThreadTest:2 11- 04 08:23:41.920 11419-11452/nl.buroboot.danielvandenberg.bootsnelleinvoer D/ThreadTest:3 11-04 08:23:41.920 11419-11452/nl.buroboot.danielvandenberg.bootsnelleinvoer D/ThreadTest:4 11-04 08 :23:41.920 11419-11452/nl.buroboot.danielvandenberg.bootsnelleinvoer D/ThreadTest:1 11-04 08:23:41.920 11419-11452/nl.buroboot.danielvandenberg.bootsnelleinvoer D/ThreadTest:2 11-04 08:23 :41.920 11419-11419/nl.buroboot.danielvandenberg.bootsnelleinvoer D/ThreadTest:5 11-04 08:23:44.920 11419-11452/nl.buroboot.danielvandenberg.bootsnelleinvoer D/ThreadTest:3 11-04 08:23:44.920 11419-11452/nl.buroboot.danielvandenberg.bootsnelleinvoer D/ThreadTest:4 11-04 08:23:44.920 11419-11452/nl.buroboot.danielvandenberg.bootsnelleinvoer D/ThreadTest:1 11-04 08:23:44.920 11419- 11452/nl.buroboot.danielvandenberg.bootsnelle 发件人D/ThreadTest:2 11-04 08:23:44.920 11419-11419/nl.buroboot.danielvandenberg.bootsnelleinvoer D/ThreadTest:5 11-04 08:23:47.920 11419-11452/nl.buroboot.danielvandenberg.bootsnelleinvoer D/ThreadTest:3 11-04 08:23:47.920 11419-11452/nl.buroboot.danielvandenberg.bootsnelleinvoer D/ThreadTest:4 11-04 08:23:47.920 11419-11419/nl.buroboot.danielvandenberg.bootsnelleinvoer D/ThreadTest :5
在我的情况下,代码实际上等了三秒钟,所以没有任何错误.然而,有趣的是,"5"可以出现在下一个1 之后.这是因为runOnUiThread的工作方式.它的作用是将你提供的runnable放在队列中.从这个队列中,android将一次抓取一个runnable并在Ui线程有时间运行它时运行它.这意味着,如果您要做这样的事情:
newTread.start();
boolean a = true;
while (a){
try {
Thread.sleep(1);
a = a;
} catch (InterruptedException e) {
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
你会得到一个像日志:
11-04 08:27:51.810 14909-14942/nl.buroboot.danielvandenberg.bootsnelleinvoer D/ThreadTest:1 11-04 08:27:51.815 14909-14942/nl.buroboot.danielvandenberg.bootsnelleinvoer D/ThreadTest:2 11- 04 08:27:54.815 14909-14942/nl.buroboot.danielvandenberg.bootsnelleinvoer D/ThreadTest:3 11-04 08:27:54.815 14909-14942/nl.buroboot.danielvandenberg.bootsnelleinvoer D/ThreadTest:4 11-04 08 :27:54.815 14909-14942/nl.buroboot.danielvandenberg.bootsnelleinvoer D/ThreadTest:1 11-04 08:27:54.815 14909-14942/nl.buroboot.danielvandenberg.bootsnelleinvoer D/ThreadTest:2 11-04 08:27 :57.815 14909-14942/nl.buroboot.danielvandenberg.bootsnelleinvoer D/ThreadTest:3 11-04 08:27:57.815 14909-14942/nl.buroboot.danielvandenberg.bootsnelleinvoer D/ThreadTest:4 11-04 08:27:57.815 14909-14942/nl.buroboot.danielvandenberg.bootsnelleinvoer D/ThreadTest:1 11-04 08:27:57.815 14909-14942/nl.buroboot.danielvandenberg.bootsnelleinvoer D/ThreadTest:2 11-04 08:28:00.815 14909- 14942/nl.buroboot.danielvandenberg.bootsnelle 发件人D/ThreadTest:3 11-04 08:28:00.815 14909-14942/nl.buroboot.danielvandenberg.bootsnelleinvoer D/ThreadTest:4
请注意,那里没有一个5.这是因为UI线程太忙而无法执行堆栈.我猜这正是发生在你身上的事.
我建议修复此问题:断点.试着弄清楚你的UI线程是否挂起,如果是这样的话,并解决它.此代码可以正常运行.
| 归档时间: |
|
| 查看次数: |
401 次 |
| 最近记录: |