当前位置:   article > 正文

Android profiler 分析内存内存泄漏_profiler 如何查看内存泄漏

profiler 如何查看内存泄漏

在这里插入图片描述1.表示强制垃圾回收器进行回收
2.用户捕获转存按钮
3.第三个按钮我这边没有,我也不是很清楚
4.用于增大和缩小时间轴的按钮,也就是按多少秒进行内存分析
5.用于跳转至实时内存数据的按钮
6.时间线,实现activity的状态,用户输入的Event事件
7.内存使用量时间线

内存是如何进行计算,内存计算中类别所示如下:
在这里插入图片描述Java:从java或者Kotlin 分配的对象内存
Native:C 或者C++ 分配的内存对象
Graphic:图像缓冲区向屏幕显示像素所占内存
Stack:栈内存,一般与你的程序开启多少线程有关
Code:你的代码占用的内存,比如 .dex 或者 .so 或者 .class 文件占用的内存
下面举个简单的例子分析内存泄漏:
代码如下

public class MemoryActivity extends AppCompatActivity {
    private LinearLayout llContainer;
    private Handler handler = new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
        }
    };
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_memory);
        llContainer = findViewById(R.id.llContainer);
        findViewById(R.id.btn).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                handler.sendEmptyMessageDelayed(0,100000);
            }
        });
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

如果在退出Activity之前没有清空Handler消息,就会造成Handler持有Activity导致Activity不能被回收
具体分析如下:

在这里插入图片描述
因为ActivityThread,中持有Looper–>mQueue–>message–>message.target–>handler–>Activity 导致Activity不能被释放

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/303657
推荐阅读
相关标签
  

闽ICP备14008679号