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

你可以显示ProgressBaronPreExecute() 里面做任务doInBackground() 并隐藏ProgressBar在里面onPostExecute()

于 2012-09-14T09:21:15.693 回答
1

Join 方法阻塞当前线程。在您的情况下,在 UI 线程中调用 Onclick 方法,因此所有 UI 操作都被阻止。阻止 Ui 线程绝不是一个好主意。

因此,您可能应该使用 Handler 或 Asynctask 来不断更新 Progressbar

于 2012-09-14T09:25:34.303 回答