我有一个活动,用来上传视频到服务器。在这个活动中,ProgressDialog被用来使它更加直观。错误说这个问题在ProgressDialog中。但是,当这个活动从不同的活动集合到达时,文件就会被上传,并且满足所需的结果,但是有一个活动,就是产生这个“内存泄漏异常”。
注意:我已经确保视频被暂停,就像在堆栈溢出的另一个链接中引用的那样,我已经确保在新的活动打开之前所有的对话框都被关闭了。
我的问题是,这种错误的根源可能是什么,在某些情况下是可行的,而对另一些情况则不然。
发布于 2017-07-17 11:09:51
将您的ProgressDialog声明为类变量。
public class DemoActivity extends AppCompatActivity {
ProgressDialog progressDialog;
//.......
}在onCreate方法中初始化它。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_demo);
progressDialog = new ProgressDialog(DashboardWithDrw.this);
progressDialog.setMessage("Loading...");
/........
}并在onPause()上驳回它
@Override
protected void onPause() {
super.onPause();
if(progressDialog!=null){
progressDialog.cancel();
}
}发布于 2017-07-17 10:59:32
主要原因是代码多次创建对象类型,但不破坏.Continually,生长包含根对象或支配对象的对象树可以防止垃圾收集从属对象。此问题是内存泄漏的常见原因。
在您的示例中,请确保在打开任何Action dismiss() .I之前都要使用DIALOG,这就是为什么会出现问题的原因。
当您开始缩小内存问题时,您还应该使用分配跟踪器来更好地了解占用内存的对象的分配位置。
发布于 2017-07-17 11:34:27
public void onDestroy(){
super.onDestroy();
if ( progressDialog!=null && progressDialog.isShowing() ){
progressDialog.cancel();
}
}
public void onPause(){
super.onPause();
if ( progressDialog!=null && progressDialog.isShowing() ){
progressDialog.cancel();
}
}https://stackoverflow.com/questions/45142328
复制相似问题