android studio 等待,等待功能不工作Android Studio

下面是更新从异步线程的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

{

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;

}

}

}

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

正如你所看到的,为了更新TextView的文本,一个辅助方法neede:

,然后从按钮的onClickListener()调用此d,它会在你的主线程中始终执行TextView.setText()。这样,您的业务逻辑就可以在其自己的线程内执行(不会导致主线程等待,这会导致UI无响应),同时更新您的异步版本TextView。

此外,您不应该尝试更新主线程上下文之外的UI元素,因为这会导致引发异常。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值