我的应用程序在线程中处理一些图像,同时显示带有进度条的对话框。
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
中重新创建对话框。但是该线程不会更改此新对话框的进度栏。
答案 0 :(得分:1)
旋转后,显示此对话框的活动(或片段)将被丢弃,并创建一个新的活动。
您在新的“活动”中重新创建对话框,但是您启动的线程在旧的对话框中更新了对话框(事实上,该线程引用了旧的对话框也构成了内存泄漏)。
我建议您执行以下操作:
使用这种方法,您将把处理逻辑封装在一个可以旋转的特殊对象中,并且不同的组件可以调用其方法并订阅来自它的通知。