最近发现项目中启动页的VideoView播放完即使调用stopPlayback()仍无法释放内存。用MAT分析后知道它内部的AudioManager对Activity进行了强引用且生命周期超出了该Activity,导致该Activity无法回收,解决方案如下:
@Override
protected void attachBaseContext(Context newBase) {
super.attachBaseContext(new ContextWrapper(newBase) {
@Override
public Object getSystemService(String name) {
// 解决 VideoView 中 AudioManager 造成的内存泄漏
if (Context.AUDIO_SERVICE.equals(name)) {
return getApplicationContext().getSystemService(name);
}
return super.getSystemService(name);
}
});
}