timer = new Timer("Timer Thread");
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
showDialog(0);
timeBar.setProgress(time);
}
}
}, INTERVAL, INTERVAL);`
我的onCreateDialog方法工作正常,所以当我从Button使用showDialog(0)时它工作正常。但是如果调度程序调用该方法则不行。
答案 0 :(得分:6)
使用处理程序:
protected static final int DIALOG_OK= 0;
timer = new Timer("Timer Thread");
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
mDialogHandler.sendEmptyMessage(DIALOG_OK);
timeBar.setProgress(time);
}
}
}, INTERVAL, INTERVAL);
private Handler mDialogHandler = new Handler(){
public void handleMessage(android.os.Message msg) {
switch (msg.what) {
case DIALOG_OK:
// We are now back in the UI thread
showDialog(0);
}
};
};
这允许您从其他线程调用UI线程上的方法。需要更多解释,请问。
答案 1 :(得分:3)
您需要在UI线程上调用这些方法。
执行此操作的一种方法是通过AsyncTask
,如this answer。
另一种方法是创建Handler并从TimerTask
向其发送消息。
您可以在Painless Threading中了解有关AsyncTasc
和UI主题的更多信息。