0

我怎样才能做到这一点?

Thread t = new Thread(new Runnable() {
    @Override
    public void run() {
        FacebookConnectTask task = 
                new FacebookConnectTask("facebookId", "token", "email", facebookGender,0, 0);
        task.setOnPreExecuteListener(this);
        task.setOnDoneListener(this);
        task.execute();
    }
});
t.start();

public void onPreExecute() { 
    progressbar.setVisibility(View.VISIBLE);
}

public void onDone() { 
    progressbar.setVisibility(View.GONE);
}

由于我正在打开一个新线程,因此我无法更改其中的 UI 元素,那么,我该如何设法对 UI 做一些事情,任务何时开始以及何时完成?

4

2 回答 2

2

你可以在AyncTask. 在另一个线程内AsyncTask执行所有内容doInBackground(),该线程无权访问您的视图所在的 GUI。

preExecute()postExecute()在此新线程中发生繁重工作之前和之后为您提供对 GUI 的访问,您甚至可以将长时间操作的结果传递postExecute()给然后显示任何处理结果。

更多信息:http: //developer.android.com/reference/android/os/AsyncTask.html

此处示例:http ://www.vogella.com/articles/AndroidPerformance/article.html

于 2012-12-28T15:01:25.370 回答
1

在您的活动中

private Handler myHandler=new Handler();

在你的完成回调中的下一个

public void onDone() { 
myHandler.post(new Runnable(){
   @Override
   public void run() {
      progressbar.setVisibility(View.GONE)
   }
})
}

但正如已经说过的那样。AsyncTask 更适合它

于 2012-12-28T15:09:56.283 回答