非UI线程更新UI,如果是Activity中可以使用runOnUIthread
runOnUiThread(()->{
textview->setText("ok");
});
如果不是在Activity中,比如悬浮窗中,则可以用Handler
private static final int MSG_REC_TIME = 1;
private static final int MSG_HDMI_STATE = 2;
private Handler handler = new Handler(Looper.getMainLooper()) {
@Override
public void handleMessage(@NonNull Message msg) {
super.handleMessage(msg);
if(msg.what == MSG_REC_TIME)
{recordTime.setText((CharSequence) msg.obj);}
else if(msg.what == MSG_HDMI_STATE){
if((Boolean)msg.obj) {
noHDMIHint.setVisibility(View.GONE);
}
else {
noHDMIHint.setVisibility(View.VISIBLE);
noHDMIHint.setText("NO HDMI-IN");
}
btnClose.setVisibility(View.VISIBLE);
}
}
};
//这个方法是非UI线程调用的
public void setRecordTime(int time) {
Message msg = new Message();
msg.what = MSG_REC_TIME;
msg.obj = DateUtils.milliseconds2String(time * 1000);
handler.sendMessage(msg);
}
//这个方法是非UI线程调用的
public void setHDMIState(boolean b) {
Message msg = new Message();
msg.what = MSG_HDMI_STATE;
msg.obj = b;
handler.sendMessage(msg);
}