造成Android卡顿的原因

以下内容整理自互联网,仅用于个人学习


  • 内存泄漏导致内存占用较高,导致JVM频繁触发GC。
    解决办法:尽可能的减少生命周期长的对象引用生命周期短的对象。
    内存泄漏的原因:
  • 各种资源在使用后没有及时释放关闭
  • 集合类泄漏

  • 单例造成的泄漏

  • 构造Adapter时,没有使用convertView重用

  • Bitmap对象不再使用时没有调用recycle释放内存

  • 静态变量引用对象,Application引用对象

  • 非静态内部类/匿名内部类持有外部类的引用

  • Handler造成内存泄漏。Handler与Message和MessageQueue都是相互关联的,万一Handler发送的Message尚未被处理,则该Message以及发送它的Handler对象被线程MessageQueue一直持有。(Handler为非静态内部类)
    解决办法:避免使用非静态内部类,将Handler声明为静态的,同时通过弱引用的方式引入Activity,在Activity的onDestroy或者onStop种一处消息队列种的消息。

  • 加载大数据,占用太多内存,同样导致JVM频繁GC。
    解决办法:要是Bitmap占用太多内存。可以通过根据需要显示的Bitmap宽高设定采样率来压缩图片。另外,通过采用LRUCache方法避免。如果是其他的大数据比如3D模型数据,可以通过使用Native空间,使用ByteBuffer.allocate(size);

  • UI线程做耗时任务(数据库操作,数据计算等),1秒绘制60帧才不会卡顿,即16.6ms要刷新一次才不会卡顿。
    解决方法:另外创建线程做耗时任务。

  • UI OverDraw。

  • 在包含ImageView的ListView中,等滑动停止后加载图片。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容