我可以使用线程来增加计数器并将其显示在Android活动的框架中。
Public class MainActivity extendsActivity {
TextView counter;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
counter = (TextView) findViewById(R.id.TV_counter);
Thread t = new Thread() {
public void run() {
runOnUiThread(new Runnable() {
public void run() {
for (int i = 0; i < 5; i++) {
try {
counter.setText("" + i);
System.out.println("Value of i= " + i);
sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
});
}
};
t.start();
}
}
我编写了这段代码,但它在控制台中正常运行,但是文本视图在终端中显示i=4
,我修改了睡眠时间(3000)并且问题仍然存在。
答案 0 :(得分:1)
首先,您不希望将睡眠置于UI线程中,导致无响应的用户界面,这永远不会好。您应该只使用它来更新您的图形。尝试用此
替换您的代码 Thread t = new Thread() {
public void run() {
for (int i = 0; i < 5; i++) {
try {
final int a = i;
runOnUiThread(new Runnable() {
public void run() {
counter.setText("" + a);
}
});
System.out.println("Value of i= " + i);
sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
t.start();
你会注意到睡眠和for循环在UIThread和你的第一个线程之外,所以基本上所有的数学都在外面完成,你只需显示结果。
这只是对您的代码的更正和进一步思考的建议
编辑:为了让你更好地理解你的代码无法正常工作,你在TextView上设置了一些值,并在你将UIThread设置为睡眠后立即使用UIThread阻止而不是花时间完成更新图形,睡觉你设置新值,他永远不会更新前一个,所以最后你只看到最后一个。
希望这有助于并享受您的工作。
答案 1 :(得分:0)
您可以使用CountDownTimer
,并在onTick()
方法中更新您的UI(此方法在UI线程上执行):
int i=0;
CountDownTimer timer = new CountDownTimer(5000,1000) {
@Override
public void onTick(long millisUntilFinished) {
// this method will be executed every second ( 1000 ms : the second parameter in the CountDownTimer constructor)
i++;
txt.setText(i);
}
@Override
public void onFinish() {
// TODO Auto-generated method stub
}
};
timer.start();