【发布时间】: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