内存泄漏优化
1.0 内存检测
内存检测第一种:代码方式获取内存
/**
* 内存使用检测:可以调用系统的getMemoryInfo()来获取当前内存的使用情况
*/
private void initMemoryInfo() {
ActivityManager activityManager = (ActivityManager) Utils.getApp()
.getSystemService(Context.ACTIVITY_SERVICE);
ActivityManager.MemoryInfo memoryInfo = new ActivityManager.MemoryInfo();
if (activityManager != null) {
activityManager.getMemoryInfo(memoryInfo);
LogUtils.d("totalMem=" + memoryInfo.totalMem + ",availMem=" + memoryInfo.availMem);
if (!memoryInfo.lowMemory) {
// 运行在低内存环境
}
}
}
内存检测第二种:leakcanary工具
LeakCanary的原理是监控每个activity,在activity ondestory后,在后台线程检测引用,然后过一段时间进行gc,gc后如果引用还在,那么dump出内存堆栈,并解析进行可视化显示
2.0 动画资源未释放
问题代码
public class LeakActivity extends AppCompatActivity {
private TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_leak);
textView = (TextView)findViewById(R.id.text_view);
ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(textView,"rotation",0,360);
object