gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 08:43:50 24 4
gpt4 key购买 nike

我有一个非常复杂的应用程序正在泄漏内存。为了追踪泄漏,我将启动器应用程序剥离为一个非常简单的 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。在您的案例中, Activity Activity 不应超过 2 个。

enter image description here

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

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

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com