gpt4 book ai didi

java - 旋转后用 ProgressBar 更新 ProgressDialog

转载 作者:行者123 更新时间:2023-11-29 23:12:04 25 4
gpt4 key购买 nike

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

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

最佳答案

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

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

我建议您执行以下操作:

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

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

关于java - 旋转后用 ProgressBar 更新 ProgressDialog,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55907159/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com