大家好,又見面了,我是你們的朋友全棧君。
使用背景:項目中需要使用幾個機器學習模型,由于加載很緩慢,是以考慮用ProgressDialog來進行提示,預測結束後dialog自動消失。
效果如下:

1.聲明Handler和ProgressDialog
public ProgressDialog progressDialog;
public Handler handler = null;
複制
2.點選事件
query.setOnClickListener(v -> {
progressDialog = new ProgressDialog(AdaBoostActivity.this);
progressDialog.setTitle("提示");
progressDialog.setMessage("正在加載...");
progressDialog.setIcon(R.drawable.running);
new Thread(){
public void run(){
try{
runOnUiThread(() -> createList());
Message msg = new Message();
msg.what = 1;
handler.sendMessage(msg);
}catch(Exception e){
e.printStackTrace();
}
}
}.start();//線程啟動
handler = new Handler(){
@Override
public void handleMessage(@NonNull Message msg) {
super.handleMessage(msg);
progressDialog.dismiss();
ToastUtil.showMessage(AdaBoostActivity.this, "預測完成!");
}
};
progressDialog.show();
});
複制
其中:
runOnUiThread(() -> createList());
複制
createList()方法完成後ProgressDialog消失,因為createList()中涉及到渲染TextView,是以使用runOnUiThread()。
createList完成後handler發送消息:
Message msg = new Message();
msg.what = 1;
handler.sendMessage(msg);
複制
然後銷毀dialog:
handler = new Handler(){
@Override
public void handleMessage(@NonNull Message msg) {
super.handleMessage(msg);
progressDialog.dismiss();
ToastUtil.showMessage(AdaBoostActivity.this, "預測完成!");
}
};
複制
3.銷毀線程
@Override
protected void onDestroy() {
super.onDestroy();
if(handler != null) {
handler.removeCallbacksAndMessages(null);
}
}
複制
釋出者:全棧程式員棧長,轉載請注明出處:https://javaforall.cn/159092.html原文連結:https://javaforall.cn