Java 旋转后使用ProgressBar更新ProgressDialog

Java 旋转后使用ProgressBar更新ProgressDialog,java,android,progressdialog,android-thread,Java,Android,Progressdialog,Android Thread,我的应用程序在线程中处理一些图像,同时显示一个带有进度条的对话框 progressDialog = new ProgressDialog(Activity.this); progressDialog.setProgressStyle(size); progressDialog.show(); Thread thread = new Thread(new Runnable() { @Override public void run() { for(int i = 0

我的应用程序在线程中处理一些图像,同时显示一个带有进度条的对话框

progressDialog = new ProgressDialog(Activity.this);
progressDialog.setProgressStyle(size);
progressDialog.show();
Thread thread = new Thread(new Runnable() {
    @Override
    public void run() {
        for(int i = 0; i < size; i++{
            //process images
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    progressDialog.setProgress(i);
                }
            });
        }

    }
});
thread.start();

onCreate
中,我重新创建了对话框。但线程不会更改此新对话框的进度条。

旋转后,显示此对话框的活动(或片段)将被丢弃,并创建一个新对话框

在新活动中重新创建对话框,但启动的线程会更新旧活动中的对话框(该线程引用旧对话框的事实也构成内存泄漏)

我建议您执行以下操作:

  • 实现一些ImageProcessor类,并将其实例放在应用程序对象中
  • 使ImageProcessor类可见,并将进度通知侦听器
  • 在“活动”中获取对此对象的引用,并在onStart()中订阅通知(在onStop()中取消订阅)
  • 当状态更新通知到达时-更新进度指示

  • 使用这种方法,您可以将处理逻辑封装在一个特殊的对象中,该对象能够经受旋转,不同的组件可以调用其方法并订阅来自该对象的通知。

    我对此并不感兴趣,也从未使用过应用程序对象。在设备旋转后,我如何保持ImageProcessor类并订阅通知?@Vasily,用示例代码解释将使一切变得清晰。
    @Override
    protected void onDestroy() {
        if (progressDialog != null && progressDialog.isShowing()) {
            progressDialog.dismiss();
        }
    
        super.onDestroy();
    }