2012-03-05 24 views
0

私は多くの計算を必要とする関数を持っているので、スレッド内でその関数を呼び出そうとします。これは私がそれを行う方法です。スレッドと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(); 
      } 

私がアプリケーションを開くと、それはprogressdialogを示しているが、4秒などの後、それが応答を停止します。私はスレッドとprogressdialogのコードを削除するときに、この問題を解決することはできません。

これを行う方法はありませんか?

+0

間違いはありますか? 「アプリケーションが応答していません」というメッセージが表示されますか?それを実行させると戻ってくるのか、それとも無期限にハングアップするのですか? –

答えて

3

これを行う最も簡単な方法は、AsyncTaskです。この記事はPainless Threadingとなっています。

3

あなたの特定の状況がうまくいかない理由は正確にはわかりませんが、生のスレッドを実行するのではなくAsyncTaskを使用する方がよいでしょう。それは問題につながる可能性がある他のスレッドの奇妙さ対UIの大部分を処理します。概念モデルはあなたがそこに持っているものとあまり変わらないので、簡単な変更でなければなりません。

0

UIスレッドで実行しているためです。したがって、5秒以上のメッセージアクションがあると、悪意のあるメッセージが表示されます。応答しません。

ロングワークを別のスレッドに配置する必要があります。あなたのケースでは、あなたはUI Threadとやり取りしているので、最も有益なのはAsyntaskを使用することです

関連する問題