1.内存泄露介绍
定义:内存中存在已经没有用的对象
表现:内存抖动、可用内存逐渐变少
危害:内存不足、GC频繁、OOM
1.1 Memory Analyzer(mat工具)
https://www.eclipse.org/mat/downloads.php
转换:hprof-conv原文件路径--- 转换后文件路径
2.内存泄露解决实战
public interface CallBack{
void dpOperate();
}
public class CallbackManager{
public static ArrayList<CallBack> sCallBacks = new ArrayList<>();
public static void addCallBack(CallBack callBack){
sCallBacks.add(callBack);
}
public static void removeCallBack(CallBack callBack){
sCallBacks.remove(callBack);
}
}
public class MemeryLeakActivity extends AppCompatActivity implements CallBack{
@override
protected void onCreate(@Nullable Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_memoryleak);
ImageView imageView = findViewById(R.id.iv_memoryleak);
Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.drawble.test);
imagView.setImageBitmap(bitmap);
CallBackManager.addCallBack(this);
}
@Override
protected void onDestroy(){
super.onDestroy();
CallBackManager.removeCallBack(this);//通过调用这个方法来解决内存泄露问题
}
@Override
public void dpOperate(){
}
}
运行后,打开profiler,下载heap信息
在终端输入命令:
3.总结
使用Memory Profiler初步观察
通过Memory Analyzer结合代码确认