使用Android工作室,我正在尝试制作一个应用程序,该应用程序从Web服务获取数据并显示数据并每5秒更新一次视图,或者当Web服务上的数据发生更改时。有了这个,我试图根据int
更改某些按钮的颜色, int 更改,当我将buttons();
应用到另一个按钮时,按钮上的颜色会发生变化然后按下它但我希望它自己更新。
当我使用while循环时,应用程序卡住了
MainActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
buttons();
}
});
runOnUiThread
位于onCreate
。
答案 0 :(得分:1)
在UI线程上使用run会导致UI冻结,请尝试使用计时器任务。 例如:
@Override
public void StopTimerTask() {
if (timer != null) {
timer.cancel();
timer = null;
}
}
public void StartTimer() {
timer = new Timer();
initializeTimerTask();
int UpdateTime = Integer.valueOf(UserSettings.getString("Update", "60000"));
timer.schedule(doAsynchronousTask, 0, YOURTIME);
}
public void initializeTimerTask() {
doAsynchronousTask = new TimerTask() {
@Override
public void run() {
myHandler.post(new Runnable() {
public void run() {
YOUR LOGIC HERE
}
});
}
};
}
答案 1 :(得分:0)
这样做,你只是把另一个类放入主要活动是成功的唯一的问题是它必须在我的主类
public class updategui extends TimerTask {
Activity context;
Timer timer;
public updategui(Activity context, int seconds) {
this.context = context;
timer = new Timer();
timer.schedule(this,
seconds * 1000, // initial delay
seconds * 1000); // subsequent rate
}
@Override
public void run() {
if(context == null || context.isFinishing()) {
this.cancel();
return;
}
context.runOnUiThread(new Runnable() {
@Override
public void run() {
try {
buttons();
} catch (Exception e) {
e.printStackTrace();
}
}
});
}}