首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >活动泄露了

活动泄露了
EN

Stack Overflow用户
提问于 2017-07-17 10:53:16
回答 3查看 432关注 0票数 0

我有一个活动,用来上传视频到服务器。在这个活动中,ProgressDialog被用来使它更加直观。错误说这个问题在ProgressDialog中。但是,当这个活动从不同的活动集合到达时,文件就会被上传,并且满足所需的结果,但是有一个活动,就是产生这个“内存泄漏异常”。

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

我的问题是,这种错误的根源可能是什么,在某些情况下是可行的,而对另一些情况则不然。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-07-17 11:09:51

将您的ProgressDialog声明为类变量。

代码语言:javascript
复制
public class DemoActivity extends AppCompatActivity {
    ProgressDialog progressDialog;
    //....... 
}

在onCreate方法中初始化它。

代码语言:javascript
复制
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_demo);

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

并在onPause()上驳回它

代码语言:javascript
复制
@Override
protected void onPause() {
    super.onPause();

    if(progressDialog!=null){
        progressDialog.cancel();
    }
}
票数 1
EN

Stack Overflow用户

发布于 2017-07-17 10:59:32

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

在您的示例中,请确保在打开任何Action dismiss() .I之前都要使用DIALOG,这就是为什么会出现问题的原因。

当您开始缩小内存问题时,您还应该使用分配跟踪器来更好地了解占用内存的对象的分配位置。

票数 1
EN

Stack Overflow用户

发布于 2017-07-17 11:34:27

代码语言:javascript
复制
public void onDestroy(){
super.onDestroy();
if ( progressDialog!=null && progressDialog.isShowing() ){
    progressDialog.cancel();
}
}

public void onPause(){
super.onPause();
if ( progressDialog!=null && progressDialog.isShowing() ){
    progressDialog.cancel();
}
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45142328

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档