旋转后使用进度条更新进度对话框



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

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中重新创建对话框。但是线程不会更改此新对话框的进度条。

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

您在新活动中重新创建对话框,但您启动的线程更新了旧对话中的对话框(此线程具有对旧对话框的引用这一事实也构成内存泄漏)。

我建议您执行以下操作:

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

使用此方法,您将处理逻辑封装在一个特殊对象中,该对象在旋转后幸存下来,并且不同的组件可以调用其方法并订阅来自它的通知。

最新更新