首页 > 试题广场 >

程序运行时,Android报告以下错误(图 2)。请解释原因

[问答题]
某同学开发一个Android应用,他想在界面上用一个TextView控件显示当前的时间(图 1):
以下是他所编写的代码:
public class MainActivity extends Activity {
    private TextView timerTextView=null;
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        timerTextView = (TextView)findViewById(R.id.tvTimer);
        Timer timer=new Timer();
        timer.scheduleAtFixedRate(new TimerTask() {
            public void run() {
                //在TextView控件上显示当前时间
                Date nowDate = new Date();
                timerTextView.setText(nowDate.toLocaleString());
            }
        }, 0, 1000);//每隔一秒种更新显示文本
    }
}
可是程序运行时,Android报告以下错误(图 2):

请解释原因,并修改代码消除此BUG。
timer.scheduleAtFixedRate(new TimerTask() {             public void run() {                 //在TextView控件上显示当前时间                 Date nowDate = new Date();                 timerTextView.setText(nowDate.toLocaleString());             }         }, 0, 1000);//每隔一秒种更新显示文本 上面的这个任务是运行在子线程的,非ui线程是不能做更新ui操作的,所以程序崩了 解决方式: (1)将更新ui操作放在runOnUiThread方法中; (2)在主线程中创建Handler对象,实现其HandleMessage方法,然后在需要更新ui的位置发送message给handler,让更新ui的操作在handleMessage中执行
发表于 2017-05-30 14:18:40 回复(0)
不能在主线程中更新UI,应使用handler
发表于 2017-05-09 18:20:01 回复(0)
timer.scheduleAtFixedRate(new TimerTask() { @Override public void run() { runOnUiThread(new Runnable() { @Override public void run() { Date nowDate =new Date(); tv_time.setText(nowDate.toLocaleString()); } }); } },0,1000);
发表于 2019-11-16 17:20:46 回复(0)