繁体   English   中英

线程和progressDialog android

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM