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,请指点指点,谢谢。

解决方案 »

  1.   

    两次显示的操作都是运行在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("更改文字");
    }

    };
      

  2.   


    这个我用handler.postDelayed作到延时了。
    只是想用这个方式实现一下,但就不知道为什么用sleep就会出现这样的问题。
      

  3.   

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

  4.   

    LS的都说的比较有道理,另外一点就是activity的生命周期中,create方法只是在启动一个activtiy的时候调用,真正显示是在start方法里面。也就是说,当调用完start方法后就会显示屏幕。。resume方法是用户能活的屏幕焦点的时候调用的。所以你的代码如果放在resume方法里面,就会有效果的。!!!!