Thread.sleep() 问题

chenbin6562 2012-04-01 03:06:15
				try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
mTextView.setText("正在检测网络1...");

try {
Thread.sleep(3000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
mTextView.setText(statusTextView.getText()+"正在检测网络2...");


问:为什么mTextView不会先显示1,再显示2,而是直接就显示2去了.

按照逻辑应该是停顿1秒后就显示第一个内容,再3秒就第2个内容才对啊.


除学java,请指点指点,谢谢。
...全文
622 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
JAVA涨薪基地 2012-04-02
  • 打赏
  • 举报
回复
LS的都说的比较有道理,另外一点就是activity的生命周期中,create方法只是在启动一个activtiy的时候调用,真正显示是在start方法里面。也就是说,当调用完start方法后就会显示屏幕。。resume方法是用户能活的屏幕焦点的时候调用的。所以你的代码如果放在resume方法里面,就会有效果的。!!!!
傲慢的上校 2012-04-01
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

我已经说了两次操作都是运行在UI线程的,同一个线程中代码的执行顺序是从上到下,
sleep 1000ms后就更改了第一次 然后紧跟着又sleep,再改第二次,
最后才会把界面展示出来,所以你第一眼看到的就是第2次的结果。
[/Quote]嗯,学习了。。。
sligner 2012-04-01
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

引用 5 楼 的回复:

我已经说了两次操作都是运行在UI线程的,同一个线程中代码的执行顺序是从上到下,
sleep 1000ms后就更改了第一次 然后紧跟着又sleep,再改第二次,
最后才会把界面展示出来,所以你第一眼看到的就是第2次的结果。

+1

整段代码执行完才会更新UI,也就是只显示第2次的结果。
[/Quote]
+1 up
ameyume 2012-04-01
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

我已经说了两次操作都是运行在UI线程的,同一个线程中代码的执行顺序是从上到下,
sleep 1000ms后就更改了第一次 然后紧跟着又sleep,再改第二次,
最后才会把界面展示出来,所以你第一眼看到的就是第2次的结果。
[/Quote]
+1

整段代码执行完才会更新UI,也就是只显示第2次的结果。
himi_ 2012-04-01
  • 打赏
  • 举报
回复
我已经说了两次操作都是运行在UI线程的,同一个线程中代码的执行顺序是从上到下,
sleep 1000ms后就更改了第一次 然后紧跟着又sleep,再改第二次,
最后才会把界面展示出来,所以你第一眼看到的就是第2次的结果。
chenbin6562 2012-04-01
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

两次显示的操作都是运行在UI线程的,如果你需要延时显示的话,可以通过handler来实现。
Java code

private TextView mTextView;

@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated m……
[/Quote]

这个我用handler.postDelayed作到延时了。
只是想用这个方式实现一下,但就不知道为什么用sleep就会出现这样的问题。
himi_ 2012-04-01
  • 打赏
  • 举报
回复
两次显示的操作都是运行在UI线程的,如果你需要延时显示的话,可以通过handler来实现。

private TextView mTextView;

@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
//setContentView(layoutResID);
//初始化操作
new Thread(new Runnable() {

@Override
public void run() {
try {
Thread.sleep(3000);
//延时后向handler发送消息
handler.sendEmptyMessage(0);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
}

private Handler handler=new Handler(){

@Override
public void dispatchMessage(Message msg) {
//接到消息后更新UI
mTextView.setText("更改文字");
}

};
chenbin6562 2012-04-01
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

你把时间间隔调大点看看效果,如果模拟器的话不保证卡,1,2秒都没效果.
[/Quote]
设置成10秒,都没有效果,直到20秒后,直接出现结果2

我是真机调试
danielinbiti 2012-04-01
  • 打赏
  • 举报
回复
你把时间间隔调大点看看效果,如果模拟器的话不保证卡,1,2秒都没效果.

80,359

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧