1

MyBookshelfActivity非同期のダウンロードおよび解凍プロセスによって呼び出されるインターフェースを拡張および実装します。

非同期ダウンロード プロセスはonBookDownloadPercent(float)、インターフェイスから定期的に呼び出します。マイ アクティビティの定義には次が含まれます。

public class MyBookshelf extends Activity implements BookDownloadListener {

    private ProgressBar mProgress;

    // .......
    // .......

    @Override
    public void onBookDownloadPercent(float _percent_finished) {
        final float final_percent  = _percent_finished;
        runOnUiThread(new Runnable() {
            public void run()
            {
                DebugLog.d(TAG, "onBookDownloadPercent " + Float.toString(final_percent));
                mProgress.setProgress((int) final_percent);
            }
        });
    }
}

LogCat では、私の関数DebugLog.dは、UI スレッドが呼び出していることを保証しますmProgress.setProgress()

09-30 11:37:06.698: DEBUG/MyBookshelf(2069): onBookDownloadPercent 0.0014221431; thread 1
09-30 11:37:07.288: DEBUG/MyBookshelf(2069): onBookDownloadPercent 1.0004596; thread 1
09-30 11:37:07.838: DEBUG/MyBookshelf(2069): onBookDownloadPercent 2.0001705; thread 1
09-30 11:37:08.318: DEBUG/MyBookshelf(2069): onBookDownloadPercent 3.0014038; thread 1
09-30 11:37:09.098: DEBUG/MyBookshelf(2069): onBookDownloadPercent 4.0002813; thread 1
09-30 11:37:09.468: DEBUG/MyBookshelf(2069): onBookDownloadPercent 5.0003366; thread 1
09-30 11:37:09.818: DEBUG/MyBookshelf(2069): onBookDownloadPercent 6.0003924; thread 1
09-30 11:37:10.158: DEBUG/MyBookshelf(2069): onBookDownloadPercent 7.0004926; thread 1
09-30 11:37:10.588: DEBUG/MyBookshelf(2069): onBookDownloadPercent 8.000748; thread 1
09-30 11:37:10.938: DEBUG/MyBookshelf(2069): onBookDownloadPercent 9.000215; thread 1
09-30 11:37:11.368: DEBUG/MyBookshelf(2069): onBookDownloadPercent 10.00017; thread 1

非同期解凍タスク用の同様のインターフェイスがあります。

@Override
public void onBookUnzipPercent(float _percent_finished) {
    final float final_percent  = _percent_finished;
    runOnUiThread(new Runnable() {
        public void run()
        {
            DebugLog.d(TAG, "onBookUnzipPercent " + Float.toString(final_percent));
            mProgress.setProgress((int) final_percent);
        }
    });
}

最初にMyBookshelf、最初の本をダウンロードする非同期タスクを呼び出し、進行状況バーが正しく更新されます (0 から 100%)。

次にMyBookshelf、最初の本を解凍する非同期タスクを呼び出し、進行状況バーが正しく更新されます (0 から 100%)。

第三に、本を読むように呼び出しMyBookshelf、それ自体を呼び出します。startActivity(nextIntent)finish()

4 番目に、本を読んだ後、MyBookshelf に戻ります。

nextIntent = new Intent(getBaseContext(), MyBookshelf.class);

次の本をダウンロードすると問題が発生します。ダウンロードが行われ、LogCat が更新をログに記録しますが、進行状況バーは空白の灰色でのみ表示され、次の本をダウンロードするときも解凍するときも更新されません。スレッド 1 が実際に実行されていることを LogCat で確認しました。onBookDownloadPerecent Runnable

更新されたときに表示されるように、mProgress戻ってきたときに何か面白いことをする必要がありますか?MyBookshelf

4

2 に答える 2

1

私の解決策は、mProgressBar を静的にすることでした。

public class MyBookshelf extends Activity implements BookDownloadListener {

    static private ProgressBar mProgress;

    // .......
    // .......

    @Override
    public void onBookDownloadPercent(float _percent_finished) {
        final float final_percent  = _percent_finished;
        runOnUiThread(new Runnable() {
            public void run()
            {
                DebugLog.d(TAG, "onBookDownloadPercent " + Float.toString(final_percent));
                mProgress.setProgress((int) final_percent);
            }
        });
    }
}
于 2011-10-01T02:28:29.103 に答える
0

本を読んだ後に myBookShelf に戻るときに、なぜ finish() を使用しないのですか?

すべて問題ないようですが、このコード行には少し疑問があります

nextIntent = new Intent(getBaseContext(), MyBookshelf.class);

于 2011-09-30T03:42:57.080 に答える