2012-09-14 31 views
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(此處未顯示)來完成服務器數據檢索。但真正的挑戰是等待後臺任務完成並從中獲得價值。我正在尋找的是:

等到服務器調用完成並獲得結果。同時顯示進度條。

有什麼想法?如果我混淆你的道歉。

在此先感謝!

回答

2

你必須看看的AsyncTask http://developer.android.com/reference/android/os/AsyncTask.html http://www.vogella.com/articles/AndroidPerformance/article.html

,您可以顯示ProgressBaronPreExecute() 做任務doInBackground() 和隱藏ProgressBaronPostExecute()

+0

與@Ajmal同意,特別是你應該讓你的進度可見onPreExecute並把它藏在onPostExecute,並執行網絡在doInBackground – marmor

+0

感謝投入!如果是這樣,我們可以讓UI線程等待,直到asynctask完成? – Renjith

+0

是的,UI會顯示'ProgressBar'直到後臺進程完成 –

1

加入方法阻塞當前線程。在你的情況下,在UI線程中調用Onclick方法,所以所有UI操作都被阻止。阻止Ui線程永遠不是一個好主意。

所以,你應該使用一個處理器或到的AsyncTask不斷更新進度