簡體   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