赞
踩
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); } }); }
如果在退出Activity之前没有清空Handler消息,就会造成Handler持有Activity导致Activity不能被回收
具体分析如下:
因为ActivityThread,中持有Looper–>mQueue–>message–>message.target–>handler–>Activity 导致Activity不能被释放
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。