java - 非常简单的 Android 应用程序中的内存泄漏

标签 java android memory-leaks

我有一个非常复杂的应用程序正在泄漏内存。为了追踪泄漏,我将启动器应用程序剥离为一个非常简单的 Android 应用程序,该应用程序在导航到下一个 Activity 时仍然泄漏 Activity 。我使用 Android Studio 中的 hprof 分析器发现了泄漏。整个精简的启动器 Activity 是:

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class HomeTest extends Activity {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    Button btnStaffStart = (Button)findViewById(R.id.btnStaffStart);

    btnStaffStart.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {


            Intent startNewActivityOpen = new Intent(HomeTest.this, StaffMenu.class);
            startActivity(startNewActivityOpen);

            finish();
        }

    });
}


}

当我导航到 StaffMenu Activity 时,分析器显示 HomeTest Activity 的泄漏。如果有的话,我做错了什么,或者启动 Activity 总是泄漏 Android 中的内存吗?我没有收到 OutOfMemory 错误消息,我只是不喜欢泄漏内存。该应用程序没有分配太多内存,因此可用内存非常少,即使在精简的 Activity 中也是如此(小于 1%)。

我运行的是 Android 4.2、4.4 和 5.1。

编辑 我刚刚尝试了另一个应用程序,它还在导航到下一个 Activity 后泄漏了启动器 Activity 。已知的 Android 错误???

最佳答案

这段代码没有内存泄漏。我无法解释内存泄漏分析器的结果,但我不会完全相信,因为这个特定功能是在上一个 AS 版本中引入的。

您是否检查过在这两个 Activity 之间多次导航时有多少个 Activity 实例?您可以在终端 adb shell dumpsys meminfo <package_name|pid> 中使用此命令来检查这一点或在“Android Monitor”角度使用 AS。您的案例中不应有超过 2 个 Activity Activity 。

enter image description here

如果您想确定,我建议您使用MAT内存分析器。如何使用你可以找here .

编辑:这是另一个好东西 option确保您的 Activity 不被泄露。 Example如何在 Activity 泄漏时转储内存堆。

关于java - 非常简单的 Android 应用程序中的内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34075810/

相关文章:

android - 在 ble 上写入后不调用 onCharacteristicChanged

android - 收到短信的处理问题

Android Studio 3.1 设计预览不显示任何内容(按钮、文本等)

swift - 为什么 FileManager.enumerator 使用了荒谬的内存量?

cocoa-touch - 在 IOS4.0 中使用 UIWebView 加载请求时发生内存泄漏

java - 使用 Java 8 迭代二维数组

使用Gson对泛型进行Java反序列化

c++ - 为什么这里没有内存泄漏

java - JPanel 中的不可见 JButton

java - NullPointerException 尝试获取 DialogFragment 的 PositiveButton