使用Thread.sleep()延迟不执行java中的某些代码部分

时间:2014-01-07 01:08:58

标签: java android multithreading

我是Android新手。我正在尝试开发一个计算器,它有一个主视图(活动),一旦应用程序启动一段时间就会显示,然后计算器作为新活动启动。为了在主屏幕中等待一段时间,我使用Thread.sleep(),如下面的代码所示。

 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.first);
    TextView loading = (TextView) findViewById(R.id.loading);
    loading.setText("Loading...");
    try {
        Thread.sleep(20000);
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    startActivity(new Intent(MainActivity.this, second.class));
}

问题是loading.setText("Loading...")如果将TextView放在评论中,则在{20}之前不会向startActivity()写任何内容。

3 个答案:

答案 0 :(得分:3)

通过向Thread.sleep()方法添加onCreate()调用,您将阻止UI线程。尝试替换

try {
    Thread.sleep(20000);
} catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
startActivity(new Intent(MainActivity.this, second.class));

Runnable launchTask = new Runnable() {

    @Override
    public void run() {
        startActivity(new Intent(MainActivity.this, second.class));
    }
};  
loading.postDelayed(launchTask, 20000);

答案 1 :(得分:1)

你实际上是在推迟主UI线程。使用异步任务稍后启动新线程。

答案 2 :(得分:1)

那是因为你正在睡觉UI线程。只有UI线程更新屏幕。

在此查看示例:http://developer.android.com/reference/android/os/AsyncTask.html

您希望setText()在使用Task的线程调用的函数中执行。释放UI线程以处理屏幕写入。