欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

android 内存优化(二)内存泄漏

程序员文章站 2022-06-23 16:57:21
1.监测泄漏的方法1.Android Devices Monitor来监测内存泄漏操作步骤如下,就可以查看到数据了2.2.全部代码1.2.3.4.5.6.3.内存不泄漏情况1.操作与数据:操作:执行进入,退出,进入,退出……(回到第一个开始的界面)操作前数据操作后数据(Cause GC要多几次,而且要等一段时间,保证GC完成):问题:堆尺寸无明显变化:12.501----->12.5774.内存泄漏情况1.操作:进入-点击按钮-退出-进入-点击按钮-...

1.监测泄漏的方法

1.Android Devices Monitor来监测内存泄漏

操作步骤如下,就可以查看到数据了
android 内存优化(二)内存泄漏

2.adb命令的,但是我不会

2.全部代码

1.MainActivity

package com.kunminx.memoryoptimization.leak;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;

import androidx.appcompat.app.AppCompatActivity;

import com.kunminx.memoryoptimization.R;

public class MainActivity extends AppCompatActivity {
//内存泄漏retained size
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_memory_leak2);
    }
    public void change(View view) {
        startActivity(new Intent(MainActivity.this, Main2Activity.class));
    }
}




2.Main2Activity:

package com.kunminx.memoryoptimization.leak;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;

import com.kunminx.memoryoptimization.R;

import java.lang.ref.WeakReference;

//引用类型
public class Main2Activity extends AppCompatActivity {
//内存泄漏
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_memory_eak);
    }
    private class TestThread extends Thread{
        @Override
        public void run() {
            super.run();
            while (true) {
                try {
                    Thread.sleep(1000*60*5);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }
//private Handler handler=new Handler();
    public void change(View view) {
        TestThread testThread = new TestThread();

        testThread.start();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        System.gc();
    }
}

3.内存不泄漏情况

1.操作与数据:

  1. 操作:
    执行进入,退出,进入,退出……(回到第一个开始的界面)
  2. 操作前数据
    android 内存优化(二)内存泄漏
  3. 操作后数据(Cause GC要多几次,而且要等一段时间,保证GC完成):
    android 内存优化(二)内存泄漏

问题:

堆尺寸无明显变化:12.501----->12.577

4.内存泄漏情况

1.操作:

进入-点击按钮-退出-进入-点击按钮-退出……进入-点击按钮-退出。

2.操作前

android 内存优化(二)内存泄漏

3.操作后

android 内存优化(二)内存泄漏

问题:

很明显,Heap Size(堆尺寸变大了):12.501------->16.095

4.问题分析:

android 内存优化(二)内存泄漏

6.遇到的问题

1.打不开Android Device monitor

关闭android studio,再打开android device monitor

本文地址:https://blog.csdn.net/sunweihao2019/article/details/110519406