我试着在我的Android应用程序中停止观看。
当我使用此代码时,我的UI线程被阻止(app isforzen)
我无法弄清楚为什么因为我的Log调用检查线程睡眠是好的。
这是我的代码,感谢您的帮助。
public void startStopWatch()
{
new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
while(stopThread == false)
{
try {
Thread.sleep(1000);
Log.i("sleep", "sleep");
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
workoutTime++;
runOnUiThread(new Runnable() {
@Override
public void run() {
workoutTimeText.setText(getResources().getString(R.string.starting_wrokout_time) + getWorkoutTime());
}
});
}
}
}).run();
}
修改
我这样解决了:
public void stopWatchTest()
{
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
workoutTime++;
runOnUiThread(new Runnable() {
@Override
public void run() {
workoutTimeText.setText(getResources().getString(R.string.starting_wrokout_time) + getWorkoutTime());
stopWatchTest();
}
});
}
}, 1000);
}
答案 0 :(得分:2)
你应该调用.start()方法。
当你直接调用.run()方法时,你在调用线程而不是你正在创建的新线程中运行它。
也就是说,创建一个线程并让它睡眠可能不是实现目标的最佳方法。
答案 1 :(得分:0)
public void startStopWatch() {
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
if (!stopThread) {
handler.postDelayed(this, 1000);
}
workoutTime++;
workoutTimeText.setText(getResources().getString(R.string.starting_wrokout_time) + getWorkoutTime());
}
}, 1000);
}
由于发布到处理程序可能会有一些偏差,因此有一些方法可以确保您在合适的时间发布。