我正在尝试在活动出现时自动启动一个简单的计时器。目前,在我的操作完成之前,活动不会明显加载。我应该覆盖其他方法吗?
@Override
protected void onStart() {
super.onStart();
for (int i = 0; i <= 100; i++) {
((TextView) findViewById(R.id.timer)).setText(String.valueOf(i));
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
Log.e("timer", e.getMessage());
}
}
}
您正在阻塞主线程,请改用 Handler 和 Runnable
handler = new Handler();
final Runnable r = new Runnable() {
public void run() {
tv.append("Hello World");
handler.postDelayed(this, 1000);
}
};
handler.postDelayed(r, 1000);
暂停当前线程以创建计时器是一个非常糟糕的主意。签出Timer
类并查看该类中的scheduleAtFixedRate()
方法,并从循环中提取((TextView) findViewById(R.id.timer))
for
。
看看 如何在 Java 中设置计时器?
当活动在 onStart(( 中运行时,您可能会看到部分布局,而不是全部布局。 也许你可以覆盖方法onWindowFocusChanged((,然后启动一个线程。 为什么在onStart((中使用'super.onResume(('?我不明白:(