我的代码如下:
public class mainActivity extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
TextView t1=(TextView) findViewById(R.id.t1);
String abc="abc";
for (int j=1;j<10;j++){
t1.setText(String.valueOf(j));
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
得到的显示结果为什么是空白屏幕9秒后出现“9”,而不是从1到9每隔一秒显示一个数字?
建议不要再主线程中进行耗时任务(如sleep),你可以把你的for循环放到子线程中,然后通过handler及至更新UI,可以实现你要的效果。
你的活动页面已经出来了,只是执行数据请求了,可以做一个dialog提示,
我的问题可以用下面的代码来演示:
public class mainActivity extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
TextView t1=(TextView) findViewById(R.id.t1);
for (int j=1;j<10;j++){
t1.setText(String.valueOf(j));
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
我希望看到显示数字从1到9,每隔一秒变一个数字,但实际上只看到9秒空白的屏幕,然后出现“9”这个数字。什么原因?
因为java语句的执行方式原因,java编译器虽然是按顺序执行,但不会等到你执行完再按顺序执行,也就是说,执行到“t1.setText(String.valueOf(j));”该句时,编译器并没有等你执行完这句就马上执行了“Thread.sleep(1000);”也就是休眠一秒,9个循环后还是执行到“Thread.sleep(1000);”这句,等执行完这
句,就开始执行设置文本的语句,最后j是等于9的,所以你看到的是九秒空白然后出现“9”这个数字
你可以设个定时器做这个东西
这是关于Activity的生命周期,因为onCreate是创建Activity,在onStart才会显示activity