2017-07-17 80 views
0

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

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

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

+0

你能后的代码? –

+0

android.view.WindowLeaked:活动com.gurung.dila.videoeditor.EarningVideoActivity泄露 –

+0

@DilaGurung显示代码 –

回答

1

将您的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(); 
    } 
} 
+0

是的是的,,,你是男人...... @ Enamul Haque –

1

主要的原因是,你的代码创建多次,但 不破坏包含根或 支配对象可以防止下级对象被 垃圾收集.Continually增长的对象树对象类型。这个问题是内存泄漏的常见原因。

在你的情况,请确保您dismiss()DIALOG打开任何行动。我之前猜你PROGRESS-DIALOG运行这就是为什么问题来了。

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

+1

具体来说,我在活动A中修剪了一些视频,一旦修剪完毕,视频路径和名称就会在另一个活动中传递,即活动B用于将提供的视频上传到服务器。它在这种情况下工作。但是当视频的起源是活动C时,内存在开始上传视频后有时会泄漏。我已确保所有弹出和进度对话框在进行新活动之前都已关闭。如果我要调用GARBAGE COLLECTOR以获取补救措施? –

+0

@DilaGurung在进行新的活动前关闭进度对话框请调试并确认。 –

+0

是的,我已经确保它。我已确保在进行新活动之前关闭所有内容 –

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(); 
} 
}