轮换后使用ProgressBar更新ProgressDialog

问题描述 投票:1回答:1

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

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();

现在,如果发生轮换,我会这样做

@Override
protected void onDestroy() {
    if (progressDialog != null && progressDialog.isShowing()) {
        progressDialog.dismiss();
    }

    super.onDestroy();
}

并在onCreate我重新创建对话框。但该线程不会更改此新对话框的进度条。

java android progressdialog android-thread
1个回答
1
投票

旋转后,将放弃显示此对话框的Activity(或Fragment),并创建一个新对话框。

您在新的Activity中重新创建对话框,但是您启动的线程更新旧对话框(此线程对旧对话框的引用也会构成内存泄漏)。

我建议你做以下事情:

  1. 实现一些ImageProcessor类并将其实例放在Application对象中。
  2. 使ImageProcessor类可观察并向侦听器通知进度。
  3. 在Activity中获取对此对象的引用,并在onStart()中订阅通知(并在onStop()中取消订阅)。
  4. 状态更新通知到达时 - 更新进度指示

使用这种方法,您将使处理逻辑封装在一个可以保持旋转的特殊对象中,并且不同的组件可以调用其方法并从中订阅通知。

© www.soinside.com 2019 - 2024. All rights reserved.