0

我在使用 ProgressBar 时遇到问题。我以前使用过进度条,从来没有遇到过这个问题。

我有一个按钮,一旦单击,就会运行一个异步任务,这可能需要很长时间才能完成。因此,我设置了一个 ProgressBar 来显示单击按钮的时间。代码是这样的:

Button btnFollowing = (Button) findViewById(R.id.btnFollowing);

    final ProgressBar pbFollowing = (ProgressBar) findViewById(R.id.progressBarFollowing);

    btnFollowing.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            pbFollowing.setVisibility(View.VISIBLE);
            ArrayList<String> friends = new ArrayList<String>();
            try {                   
                GetFriends gf = new GetFriends(MainActivity.this);
                friends = gf.execute("value").get();        
            } catch (InterruptedException e) {
                Log.e("Exception MainActivity gettingfriends", e.toString());
            } catch (ExecutionException e) {
                Log.e("Exception MainActivity gettingfriends", e.toString());
            }
            setStringArrayPref(MainActivity.this, "friends", friends);
            pbFollowing.setVisibility(View.INVISIBLE);
        }
    });

问题是 ProgressBar 在 AsyncTask 结束之前不会显示在屏幕上,即使 setVisible 行在 AsyncTask 创建之前也是如此。

关于为什么会发生这种情况的任何想法?

谢谢指教!

4

2 回答 2

1

问题在于这一行:

friends = gf.execute("value").get(); 

执行将在后台启动任务,但对其调用 get() 将等待执行完成然后返回结果。因此,您的代码将在此行中等待,直到 AsyncTask 完成,之后您的进度条将变得可见,因为您使用 get 调用阻塞了主线程。

您应该在 AsyncTask 上调用 execute 方法,然后使用 AsyncTask 的 onPostExecute 在执行结束时执行您需要执行的操作。

于 2012-12-27T22:12:05.057 回答
0

AsyncTask onPre... 将在 GUI threead 上运行,它会显示 AsyncTask onPost 也将在 gui 线程上运行,你应该关闭/隐藏

于 2012-12-27T22:03:13.677 回答