gpt4 book ai didi

java - 等待功能不起作用 Android Studio

转载 作者:行者123 更新时间:2023-12-01 09:54:19 24 4
gpt4 key购买 nike

我正在使用 Android Studio。我正在尝试修复一个按下按钮的时钟,它会将时间返回到 12:00。我让它工作了,但我希望它通过等待 250 毫秒来执行。问题是他们只等待 250 毫秒(但有两次执行,因此时间为 5 秒),然后立即转到 12:00,而不将其显示到 TextView 。我做错了什么吗?另外,如果我在这里应用处理程序函数,恐怕我没有太多使用它的知识。

编辑:这是来 self 的 MainActivity 方法。例如,从 1 更改为 2,然后等待 250 毫秒,从 2 更改为 3,然后等待 250 毫秒

synchronized (this){
try {
while(minuteHand != 0 || hourHand != 12){
if (hourHand != 12){
hourHand++;
hourText.setText(Integer.toString(hourHand));
wait(250);
}
if (minuteHand != 0) {
minuteHand += 5;
minuteHand %= 60;
minuteText.setText(Integer.toString(minuteHand));
wait(250);
}
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}

最佳答案

以下是从异步线程更新 UI 元素的正确方法:

public class SampleActivity extends Activity {
private TextView hourText;
private TextView minuteText;

private void updateHourText(final String text) {
runOnUiThread(new Runnable() {
@Override
public void run() {
hourText.setText(text);
}
});
}

private void updateMinuteText(final String text) {
runOnUiThread(new Runnable() {
@Override
public void run() {
minuteText.setText(text);
}
});
}

private class ClockTask extends AsyncTask<Void, Void, Void>
{
private int hourHand;
private int minuteHand;


public ClockTask(int hourHand, int minuteHand) {
this.hourHand = hourHand;
this.minuteHand = minuteHand;
}

@Override
protected Void doInBackground(Void... voids) {
try {
while(minuteHand != 0 || hourHand != 12){
if (hourHand != 12){
hourHand++;
updateHourText(Integer.toString(hourHand));
Thread.sleep(250);
}
if (minuteHand != 0) {
minuteHand += 5;
minuteHand %= 60;
updateMinuteText(Integer.toString(minuteHand));
Thread.sleep(250);
}
}
} catch (InterruptedException e) {
e.printStackTrace();
}
return null;
}
}
}

然后从按钮的 onClickListener() 调用此函数:

new ClockTask(hourHand, minuteHand).execute();

如您所见,为了更新 TextView 的文本,需要一个辅助方法,该方法始终在主线程内执行 TextView.setText() 。这样,您的业务逻辑就可以在其自己的线程中执行(不会导致主线程等待,否则会导致 UI 无响应),同时异步更新您的 TextView

此外,您永远不应该尝试在主线程上下文之外更新 UI 元素,因为这会导致抛出异常。

关于java - 等待功能不起作用 Android Studio,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37362814/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com