您当前的位置: 首页 >  性能优化

命运之手

暂无认证

  • 2浏览

    0关注

    747博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

【Android】【性能优化】内存优化 性能优化 ANR预防

命运之手 发布时间:2018-04-10 22:48:30 ,浏览量:2

  1. 使用AndroidStudio内置的AndroidProfiler进行内存监控分析: 单击定位某个时间点的内存状态 点击左上角DumpJavaHeap按钮,生成内存记录文件 在下方面板查看分析结果,可以浏览所有类和实例占用的内存大小
  2. 出现内存泄漏的场景情形: 集合类引用对象 静态变量/单例对象引用对象 非静态内部类/匿名内部类引用对象 资源未关闭
  3. 防止内存泄漏,内存溢出的方法: 对大图片进行压缩(减少像素,降低颜色质量)后再加载 条件允许的情况下,对图片及时进行回收 在适当情景下,使用软引用弱引用来替代强引用 集合中不再使用的对象,及时remove 不再使用的对象,手动设置为null,提高被回收几率 不要在子线程或者静态变量中引用Activity 在Activity中使用静态内部类来代替内部类,因为非静态内部类会依赖于Activity 在允许的情况下,使用ApplicationContext代替ActivityContext,这样可以降低Activity被强引用的几率 对于需要频繁加载的图片(如ListView,RecyclerView,GridView中,加载网络图片等),使用缓存或多级缓存 对于需要频繁使用的对象(如ListView的Item,ViewPager中的Fragment,线程,数据库连接等),使用对象池技术复用对象 大量的字符串拼接,使用StringBuilder或StringBuffer来代替字符串相加 对于需要关闭销毁解绑的对象,要及时关闭销毁解绑(如Stream,Cursor,WebView,Receiver等) 优化Layout嵌套结构,避免产生多余的View 使用AndroidProfiler来监控内存泄漏
  4. 其它性能优化方法: 使用重用布局,使用减少布局层级,使用延迟加载 自定义组件时,不要在onDraw方法中频繁创建对象,经常使用的对象,在构造方法中一次性创建 在ListView等组件中,复用itemView,避免每次都创建View,使用ViewHolder,避免每次都findViewById 使用RecyclerView等优化过的控件,来代替ListView 在ListView/RecyclerView/GridView等控件中,如果数据源过大,考虑异步加载和分页加载 避免过度创建对象 尽量不要使用枚举类 常量使用static和final来修饰 使用Android优化过的数据结构(SparseArray等) 对需要频繁加载的网络资源,使用磁盘缓存和内存缓存 在Gradle中使用minifyEnabled和shrinkResources来精简无用的代码和资源
  5. ANR定义: ANR即Application Not Responding,应用程序无响应,本质上即是一个超时监听
  6. ANR触发条件: KeyEvent:5秒内未处理完成 BroadcastReceiver:10秒内未处理完成 Service:20秒内未处理完成
  7. ANR避免方法:核心点就是不要在主线程中执行耗时较长的操作 文件操作,数据库操作,网络操作,硬件操作,解压图片操作,长时间任务,都要放到子线程中取执行,执行完毕通过Handler更新UI BroadcastReceiver和Service也是运行在主线程中,也要开启子线程来执行长耗时操作 不要在主线程中使用可能产生阻塞的代码,比如sleep,wait,lock,future.get等
关注
打赏
1654938663
查看更多评论
立即登录/注册

微信扫码登录

0.0382s