我是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()
写任何内容。
答案 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线程以处理屏幕写入。