活动已泄露

时间:2017-07-17 10:53:17

标签: android memory-leaks progressdialog

我有一个用于将视频上传到服务器的活动。在此活动中,ProgressDialog已被用于使其更直观。该错误表明问题在ProgressDialog中。但是当从不同的活动集中达到此活动时,文件将被上传并且满足所需的结果,但是有一个活动正在产生这个“内存泄漏异常”。

注意:我确保视频暂停,就像在stackoverflow的另一个链接中引用的那样 我确保在打开新活动之前关闭所有对话框。

我的问题是这种错误的起源可能是什么,它适用于某些情况但不适用于其他情况。

3 个答案:

答案 0 :(得分:1)

  

主要原因是您的代码多次创建的对象类型   不破坏。持续生长包含root或者的对象树   支配对象可以防止从属对象存在   垃圾回收。此问题是内存泄漏的常见原因。

在您的情况下,请确保在开启任何操作之前 dismiss() DIALOG 。我猜你的 {{1}运行那就是为什么会出现问题。

  

当你开始缩小内存问题时,你也应该使用    Allocation Tracker ,以便更好地了解您的位置   占用内存占用的对象。

答案 1 :(得分:1)

将ProgressDialog声明为类变量。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_demo);

    progressDialog = new ProgressDialog(DashboardWithDrw.this);
    progressDialog.setMessage("Loading...");
    /........
}

在onCreate方法中初始化它。

onPause()

并在@Override protected void onPause() { super.onPause(); if(progressDialog!=null){ progressDialog.cancel(); } }

上将其关闭
string[,] input_data = new string[5,12];
var column1 = input_data.GetLength(0);
var column2 = input_data.GetLength(1);

答案 2 :(得分:0)

public void onDestroy(){
super.onDestroy();
if ( progressDialog!=null && progressDialog.isShowing() ){
    progressDialog.cancel();
}
}

public void onPause(){
super.onPause();
if ( progressDialog!=null && progressDialog.isShowing() ){
    progressDialog.cancel();
}
}