【问题标题】:Memory Heap Size Keeps Increasing When Opening And Closing Activity打开和关闭活动时,内存堆大小不断增加
【发布时间】:2018-10-22 07:57:41
【问题描述】:

我从 A 启动活动 B。然后我销毁 B 活动。然后我再次从 A 启动活动 B,依此类推。当我这样做时,我的堆大小每次都会增加约 0.5 MB。我使用 android profiler,当活动 B 被杀死后,我强制从 android profiler 进行垃圾收集。问题是 GB 之后的堆大小没有减少。我的代码也是上面的,是来自 android studio 的通用代码。如果有问题,我如何通过 Heap Dump 看到它?它显示了许多分配,我不明白。

MainActivity

 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            startActivity(newIntent(MainActivity.this,Main2Activity.class));
        }
    });
}

MainActivity2

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main2);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                    .setAction("Action", null).show();
        }
    });
}

检查日志堆:

 Log.d("tag", "debug. =================================");
                Log.d("tag", "debug.heap native: allocated " + df.format(allocated) + "MB of " + df.format(available) + "MB (" + df.format(free) + "MB free)");
                Log.d("tag", "debug.memory: allocated: " + df.format(new Double(Runtime.getRuntime().totalMemory() / 1048576.0)) + "MB of " + df.format(new Double(Runtime.getRuntime().maxMemory() / 1048576.0)) + "MB (" + df.format(new Double(Runtime.getRuntime().freeMemory() / 1048576.0)) + "MB free)");

【问题讨论】:

  • @UmangBurman Nope.Irrelevant

标签: android heap-memory


【解决方案1】:

转储您的内存信息,并在您完成几次后检查 MainActivity2 的实例计数,如果计数大于 0 并且等于您启动它的次数,则表示存在内存泄漏问题,或者计数为零然后忽略它。

重新编辑: 添加图片,列分配数为实例数,找到您的活动并检查它

【讨论】:

  • 在转储信息中,我在哪里可以看到活动实例?
  • 我添加了一张图片,应该告诉你在哪里可以找到它,请检查它。
  • 好的,谢谢,我会检查的。它会在左栏中显示活动吗?
  • 是的,买的方式,我建议你可以选择按包安排,这样可以帮助你更快地找到你的活动。
猜你喜欢
  • 1970-01-01
  • 2013-09-27
  • 2018-11-26
  • 2015-12-06
  • 1970-01-01
  • 2017-03-09
  • 2013-06-09
  • 2015-06-15
  • 2019-10-29
相关资源
最近更新 更多