作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
抱歉,标题有点难懂,但我不是 100% 确定要问什么。向您展示代码并查看您是否从中理解会更容易。我在这里的另一篇文章中找到了使用进度对话框的方法,所以这基本上是添加到那篇文章中。 ( ProgressDialog not showing until after function finishes )顺便说一句,这是使用带有 android 插件的 eclipse 环境。
final MyClass mc = new MyClass(text,info, this);
final ProgressDialog dialog = ProgressDialog.show(this, "", "Loading. Please wait...", true);
Thread t = new Thread(new Runnable()
{
public void run()
{
// keep sure that this operations
// are thread-safe!
Looper.prepare(); //I had to include this to prevent force close error
mc.doStuff();//does ALOT of stuff and takes about 30 seconds to complete... which is why i want it in a seperate thread
runOnUiThread(new Runnable()
{
@Override
public void run() {
if(dialog.isShowing())
dialog.dismiss();
}
});
}
});
t.start();
tmp = mc.getStuff();
现在的问题是 tmp 总是空的,因为 mc 还没有完成工作。所以,如果我这样做,它会完成所有操作,但不会显示进度对话框..
t.start();
while(t.isAlive());//noop
tmp = mc.getStuff();
任何想法或想法将不胜感激!
最佳答案
在您的第二次尝试中,您让主线程等待新线程完成。
runOnUiThread 调用中的 runnable 是您要执行的操作 tmp = mc.getStuff();然后在 mc 完成 doStuff() 后在主线程上执行。
但除此之外,请查看 blindstuff 评论的链接,它简化了线程。
关于安卓编程 : I cannot get data from a background thread AND show a progress dialog,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8051682/
我是一名优秀的程序员,十分优秀!