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

时间:2015-12-03 20:46:18

标签: java android memory-leaks

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

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活动时,分析器显示HomeTest活动的泄漏。什么,如果有的话,我做错了还是启动活动总是在Android中泄漏内存?我没有收到OutOfMemory错误消息,我只是不喜欢泄漏内存。该应用程序没有分配太多内存,因此即使在精简活动中(小于1%),可用内存也非常小。

我正在运行Android 4.2,4.4和5.1。

修改 我刚尝试了另一个应用程序,它在导航到下一个活动后也泄漏了启动器活动。已知的android bug ???

1 个答案:

答案 0 :(得分:2)

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

您是否检查了多次在这两个活动之间导航时有多少个活动实例?你可以在终端adb shell dumpsys meminfo <package_name|pid>中使用此命令或在“Android Monitor”透视图中使用AS来检查这一点。在你的情况下,活动活动不应超过2个。

enter image description here

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

编辑:这是另一个好option,以确保您的活动不会泄露。 Example如何在活动泄漏时转储内存堆。