5,336
社区成员
发帖
与我相关
我的任务
分享我是新手,用 DevEco Studio创建一个普通手机项目,根据教程,修改xml添加了一个Text标签,然后在主程序页面 MainAbilitySlice 中,声明这个Text的变量:
private Text m_resultText;
在OnStart()中初始化:
@Override
public void onStart(Intent intent) {
super.onStart(intent);
super.setUIContent(ResourceTable.Layout_ability_main);
m_txtFrame = (Text)findComponentById(ResourceTable.Id_txtTime);
startTimer();
}
其中的 Id_txtTime 是这个Text标签的ID,后面的startTimer()实现设置功能:
private void startTimer(){
m_txtFrame.setText("time ability startTimer 1"); // 这一行成功
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
updateTime();
}
}, 5000, 1000);
/*
m_txtFrame.setText("time ability startTimer 2");
*/
}
private void updateTime()
{
m_txtFrame.setText("time ability updateTime 1");
/*
m_tmCounter++;
String tmStrVal = Integer.toString(m_tmCounter);
m_txtFrame.setText(tmStrVal);
*/
}
我的目的是启动一个定时器,每一秒刷新一次用来显示一个计数器,在startTimer()中,设置标签的内容是成功的,如果障蔽了updateTime()中的内容,程序可以正常运行,但如果像上面那样,在updateTime()中也设置Text的内容,结果程序崩溃。我用的是远程模拟器运行的。
看看是哪里不对吗?
我大致知道原因了,我把它改成线程,在线程中设置的时候,try...catch 到异常,错误原因是非UI线程更新界面。但是我找不到UI线程,不知道该如何修改