活动中的线程通信

时间:2012-09-14 09:16:52

标签: android multithreading view

我有一个活动类如下。

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(此处未显示)来完成服务器数据检索。但真正的挑战是等待后台任务完成并从中获取价值。我在寻找的是:

等到服务器调用并获得结果。同时显示进度条。

有什么想法?如果我迷惑你,请道歉。

提前致谢!

2 个答案:

答案 0 :(得分:2)

您必须查看AsyncTask http://developer.android.com/reference/android/os/AsyncTask.html http://www.vogella.com/articles/AndroidPerformance/article.html

您可以在ProgressBar中显示onPreExecute()doInBackground()执行任务 并隐藏ProgressBar

中的onPostExecute()

答案 1 :(得分:1)

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

所以你可能应该使用Handler或Asynctask来继续更新Progressbar