【问题标题】:ProgressDialog in runOnUiThreadrunOnUiThread 中的 ProgressDialog
【发布时间】:2016-06-14 15:04:34
【问题描述】:

我正在尝试显示进度对话框并在 runOnUiThread 中更新它 但进度条从未显示。当我用“新线程”替换 runOnUiThread 时,它工作正常。但我希望它与 runOnUiThread 一起工作

这是我的代码,我已经删除了不必要的代码

public class test extends Activity {

private ProgressDialog progress;
Handler progressBarHandler = new Handler();


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
testing();
}

public void testing() {
    progress=new ProgressDialog(this);
    progress.setMessage("Saving Progress");
    progress.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
    progress.setProgress(0);
    progress.setMax(100);
    progress.setCancelable(false);
    progress.show();
    runOnUiThread(new Runnable() {
        @Override
        public void run() {
        //do some work 
        for (int i =0; i<100;i++){

        //some work


             progressBarHandler.post(new Runnable() {

                        @Override
                        public void run() {
                            progress.setProgress(finalCount);
                        }
             });
        }
}
}

【问题讨论】:

  • 它将永远无法工作... UI 实现基础知识:如果您使用循环阻止 UI 线程,则在您释放 UI 线程之前不会调用任何其他 UI 调用(如设置进度) - 因为消息队列

标签: java android multithreading progressdialog


【解决方案1】:

试试这个

public class MainActivity extends AppCompatActivity {

private ProgressDialog progress;
Handler workHandler;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    progress=new ProgressDialog(this);
    progress.setMessage("Saving Progress");
    progress.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
    progress.setProgress(0);
    progress.setMax(100);
    progress.setCancelable(false);
    progress.show();

    workHandler = new Handler(new HandlerThread("workHandlerThread").getLooper());

    workHandler.post(new Runnable() {
        @Override
        public void run() {

            //Do some work


            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    progress.setProgress(/*work result*/);
                }
            });
        }
    });
}
}

想法是您在绑定到workHandler 的 HandlerThread 上执行工作,然后使用 runOnUiThread() 将结果发布回 UI

【讨论】:

    猜你喜欢
    • 2013-05-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-15
    • 1970-01-01
    • 1970-01-01
    • 2021-11-25
    • 1970-01-01
    • 2015-04-15
    相关资源
    最近更新 更多