0

以下のようなアクティビティクラスがあります。

public class LoginActivity extends Activity implements OnClickListener {
   @Override
   public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.main);
      button1 = (ImageView) findViewById(R.id.button1);
      button1.setOnClickListener(this);
   }
   @Override
   public void onClick(View v) {
       loader = (ProgressBar) findViewById(R.id.loader);
       Thread processThread = new Thread(loaderThread); 
       loader.setVisibility(View.VISIBLE);
       processThread.start();

       try {
        Thread.currentThread().join();
        Log.i("Activity","gone past join()");
        loader.setVisibility(View.INVISIBLE);
   } catch (InterruptedException e) {
        e.printStackTrace();
   }
   }

  private Runnable loaderThread = new Runnable() {
 public void run() {
    ServiceCaller serviceCaller = new ServiceCaller();
    boolean status = serviceCaller.checkProcess(url);
  }
  };
}

さらなる質問 [編集済み] これがシナリオです。メイン アクティビティ クラスは、クリック時にスレッドを作成します。次に、作成されたスレッドがサーバーからデータをフェッチします。これは時間のかかる作業です。そのため、進行状況バーが UI に表示されます。現在、AsyncTask (ここには表示されていません) を使用してサーバー データの取得を行っています。しかし、本当の課題は、バックグラウンド タスクが完了するのを待って、そこから値を取得することです。私が探しているのは:

サーバー呼び出しが行われるまで待って、結果を取得します。その間、進行状況バーを表示します。

何かご意見は?ご迷惑をおかけしましたことをお詫び申し上げます。

前もって感謝します!

4

2 に答える 2

2

AsyncTask http://developer.android.com/reference/android/os/AsyncTask.html http://www.vogella.com/articles/AndroidPerformance/article.htmlをご覧ください。

でタスク を表示して非表示にするProgressBarことができますonPreExecute()doInBackground()ProgressBaronPostExecute()

于 2012-09-14T09:21:15.693 に答える
1

Join メソッドは現在のスレッドをブロックします。あなたの場合、Onclick メソッドは UI スレッドで呼び出されるため、すべての UI 操作がブロックされます。Ui スレッドをブロックすることは決して良い考えではありません。

したがって、プログレスバーを更新し続けるには、おそらく Handler または Asynctask のいずれかを使用する必要があります

于 2012-09-14T09:25:34.303 に答える