我有一个活动类如下。
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(此处未显示)来完成服务器数据检索。但真正的挑战是等待后台任务完成并从中获取价值。我在寻找的是:
等到服务器调用并获得结果。同时显示进度条。
有什么想法?如果我迷惑你,请道歉。
提前致谢!
答案 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