【问题标题】:ProgressBar not updating correctly after return to ActivityProgressBar 在返回 Activity 后没有正确更新
【发布时间】:2011-09-30 03:21:05
【问题描述】:

MyBookshelf 扩展了Activity 并实现了一个由异步下载和解压缩过程调用的接口。

异步下载过程定期从接口调用onBookDownloadPercent(float)。我的 Activity 定义包括:

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()

第四,看完书我回到MyBookshelf:

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

当我下载下一本书时出现问题:下载发生,LogCat 记录更新,但进度条仅显示为空白灰色,并且在下载或解压缩时更新下一本书。我已通过 LogCat 确认线程 1 确实通过 onBookDownloadPerecent Runnable 运行

当我回到MyBookshelf 时,我是否需要对mProgress 做一些有趣的事情,以便它在更新时显示?

【问题讨论】:

    标签: android android-progressbar


    【解决方案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);
                }
            });
        }
    }
    

    【讨论】:

      【解决方案2】:

      为什么在阅读完书后返回 myBookShelf 时不使用 finish()?

      看起来一切正常,但是我对这行代码有点怀疑

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

      【讨论】:

      • 我在返回 MyBookshelf 时完成()另一个活动;我只是没有包括上面的内容。
      • 这是因为 MyBookshelf 在调用 BookReader 类时自行完成。 BookReader 需要重新启动 MyBookshelf 活动。
      • 您无需完成 MyBookShelf 即可启动 BookReader。您可以使用 StartActivityForResult 来启动 BookReader 类。 BookReader 类完成后,MyBookShelf 将收到来自 onActivityResult 的调用。因此,您不必再次初始化所有 UI 内容。我想知道是不是部分出了问题。让我知道:)
      • 感谢您的建议,尽管我们这样做是出于内存管理的原因。当打开一些位图时,我们展示的书籍非常大,较小的设备会崩溃。因此,为了节省所有可能的内存,我们完成了不需要的进程。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多