【问题标题】:Android, Progress Bar not displaying before method execute?Android,在方法执行之前不显示进度条?
【发布时间】:2015-11-20 23:22:15
【问题描述】:

我有一个进度条,在我调用方法 writeFile() 之前,我将其从 View.GONE 更改为 View.VISIBLE

类似这样的:

onButtonPress(){
    mProgressBar.setVisibility(View.VISIBLE);
    writeFile();
}

writeFile() 方法可能需要几秒钟(大量数据解析),但需要用户在之后采取额外的操作,因此不会在后台线程上执行。这是为了避免用户在应用程序中的其他地方导航,然后出现一个弹出窗口或重定向,因为他们认为他们已经完成了。

我的问题是进度条在 writeFile() 方法完成之前不会显示,然后在用户被重定向到其他地方之前短暂弹出一瞬间。

如果我注释掉方法调用,那么 ProgressBar 会立即出现并无限旋转,因此我知道该栏工作正常。

如何保证弹出进度条FIRST,然后调用writeFile()方法?

提前致谢。

另外:

我对异步任务没有太多经验(完全没有!),所以不确定这是否是我需要采取的路线。我正在寻找的行为是用户按下按钮时弹出的进度条,并保持在屏幕上直到方法完成。我不希望用户在这段时间内浏览应用程序。

【问题讨论】:

  • writeFile方法是否在主线程中运行?如果是这样,那是您的问题,因为主线程将阻止 UI 更新。
  • 是的,确实如此。所以这是一个异步问题?
  • WriteFile 正在阻塞主线程 UI,您应该使用另一个线程。
  • 是的,任何需要更长时间的操作都应该在另一个线程中完成,这样 UI 就不会被阻塞。如果您在 AsyncTask 方面没有任何经验,您可能想看这里:stackoverflow.com/questions/9671546/asynctask-android-example
  • 听起来您的 writeFile() 方法已锁定 mainThread 导致 UI 阻塞

标签: android android-asynctask android-progressbar


【解决方案1】:

您可以尝试下面的代码来检查进度条是否可见

new Thread(new Runnable() {
    public void run() {
        writeFile();
    }
}).start();

【讨论】:

  • @cgomezmendez 为什么不呢?
  • AsyncTask 肯定是一种更好的方法,但只是为了确保问题出在 UI 块 @Birrel 可以尝试
  • @RenanNery 它是。我最终使用了一个异步任务,现在一切都很好。感谢您的提示。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-07
  • 2017-12-22
  • 2013-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多