0

ProgressBar に問題があります。以前にプログレスバーを使用したことがありますが、この問題は一度もありませんでした。

クリックすると asynctask を実行するボタンがありますが、完了するまでに時間がかかる場合があります。そこで、ボタンがクリックされたときに表示される 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);
        }
    });

問題は、AsyncTask が作成される前に setVisible 行があったとしても、AsyncTask が終了するまで ProgressBar が画面に表示されないことです。

なぜこれが起こっているのかについてのアイデアはありますか?

アドバイスありがとう!

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 に答える