android 内存泄漏(一)查看应用是否泄漏

1.监测泄漏的方法

什么事内存泄漏呢?
其实就是finish等结束操作,使用了,但是因为还是可达状态(就是没有完成),导致无法结束,这样这个对象就保持在那里,这样来回切换多次后,就会越来越多的对象,这就是内存泄漏。导致的结果是,对象多了,那肯定卡死

1.用android studio自带的工具Profiler检查内存是否泄漏:

记得GC哦,不GC的话Main2Activity还是会一直增加:步骤如下
在这里插入图片描述

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

操作步骤如下,就可以查看到数据了
在这里插入图片描述

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. 操作前数据
    在这里插入图片描述
  3. 操作后数据(Cause GC要多几次,而且要等一段时间,保证GC完成):

问题:

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

4.内存泄漏情况

1.操作:

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

2.操作前

在这里插入图片描述

3.操作后

在这里插入图片描述

问题:

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

4.问题分析:

在这里插入图片描述

6.遇到的问题

1.打不开Android Device monitor

关闭android studio,再打开android device monitor

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值