我的应用程序处理一个线程中的一些图像,同时它显示一个带有进度条的对话框。
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中重新创建对话框,但是您启动的线程更新旧对话框(此线程对旧对话框的引用也会构成内存泄漏)。
我建议你做以下事情:
使用这种方法,您将使处理逻辑封装在一个可以保持旋转的特殊对象中,并且不同的组件可以调用其方法并从中订阅通知。