[英]Thread and progressDialog android
我有一个需要大量计算的函数,因此我尝试在线程内调用该函数。 这是我的方法:
submit.setOnClickListener(new OnClickListener() {
public void onClick(View view) {
if(!(fromAdress.getText().toString().length() > 0) || !(toAdress.getText().toString().length() > 0)) {
Toast.makeText(this, "ERROR IN INPUT", Toast.LENGTH_LONG).show();
}
else {
if(connected) {
final ProgressDialog dialog = ProgressDialog.show(this, "Calculating",
"Please wait...", true);
final Handler handler = new Handler() {
public void handleMessage(Message msg) {
dialog.dismiss();
}
};
Thread checkUpdate = new Thread() {
public void run() {
measureDistanceAndTime(fromAdress.getText().toString(), toAdress.getText().toString());
handler.sendEmptyMessage(0);
}
};
checkUpdate.start();
}
else
Toast.makeText(this, "No network!", Toast.LENGTH_LONG).show();
}
当我打开应用程序时,它显示进度对话框,但是大约4秒钟后,它停止响应。 我无法弄清楚这个问题,因为当我删除线程和progressdialog的代码时,它正常工作!
这不是这样做的方法吗?
我不太确定为什么您的特定情况不起作用,但是使用AsyncTask
而不是尝试做原始线程可能会更好。 它处理大多数UI与其他可能导致问题的线程异常。 概念模型与您所拥有的模型没有太大不同,因此应该轻松进行更改。
最简单的方法是使用AsyncTask
。 阅读标题为“ 无痛线程处理”的文章。
您需要一个AsynTask 。
因为您正在使用UI Thread。 因此,当某些消息操作持续5秒钟以上时,他们会注意到臭名昭著的消息:不响应。
您应该在其他线程上花费大量时间。 在您的情况下,因为您正在与UI THread交互,所以最有利的方法是使用Asyntask
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.