Android性能优化—-内存优化

作者 : 开心源码 本文共1827个字,预计阅读时间需要5分钟 发布时间: 2022-05-12 共164人阅读

现实开发中用到的性能优化方案

归纳如下:

Android的内存优化可谓是优化中的重头戏啊,为啥嘞?由于内存太金贵了比柴米油盐贵多了.其实刚开始做Android的时候根本不在乎这些,没错一点不在乎.产品设计出来,UI出了图,不论他三七二十一,七十二变的上代码完成功能就完事了,现在想想真的好不负责任啊,宛如一个渣男!!不过好在悬崖勒马,没有放任下去不论,慢慢的开始重视起来.其实能内存优化也就那几个方面,可能总结的的不算完美,但也是尽心尽力,大致有以下几个方面:

? ? 一.内存泄漏? 内存泄漏大致会出现在如下几个点

? ? ? ? ? ? ? ? ① 不正确的使用单例模式—–有的单例中需要传入上下文,因为单例模式中方法和对象是static的生命周期和应用是一样的,当我们传入的上下文是当前activity的时候,退出activity却回收不掉,就会引起内存泄漏.处理方法呢:就是在单例模式中把当前上下文换成ApplicationContext或者者content.getgetApplicationContext(),由于这两个的生命周期是和应用一样的? 这样就不会导致内存泄漏了.

? ? ? ? ? ? ? ? ②? 非静态内部类,非静态匿名内部类—-java中设计只需是非静态的就会持有外部类的强引用,比方实现一个Thread内部会有run方法,当你的activity中止了但是run方法还没有执行完,这就会导致内存泄漏,处理办法:第一种是把内部类设为静态内部类,第二种是把要传入的activity给弱引用

? ? ? ? ? ? ? ? ③? Handler—-其实handler引起的内存泄漏和非静态内部类一样,处理方法也一样 不过还可以多一种方法就是在activity的onDestroy()中调用mHandler.removeCallbacksAndMessages(null);

? ? ? ? ? ? ? ? ④? 静态变量 —静态的生命周期都是和应用的周期是一样的 所以静态变量也不例外,比方intent跳转的时候需要传递参数假如你的tag是在activity中写的静态变量,那一定会内存泄漏,处理方法:新建一个全局的类 里面放置这些常量

? ? ? ? ? ? ? ? ⑤? 资源未关闭—比方少量读写的io流使用完后没有及时关闭,处理方法:记得关闭流

? ? ? ? ? ? ? ? ⑥? 少量监听未取消–比方使用eventbus,glide使用后为及时取消注册监听.处理办法:在onDestroy中及时取消

? ? ? ? ? ? ? ? ⑦? 使用AsyncTask—其实现在用异步的不多了由于rxjava太好用了? 处理办法:和内部类差不多设为静态就行了

? ? ? ? ? ? ? ? ⑧? bitmap—使用完没有recycle? 处理办法:关闭页面时调用recycle()

? ? ? ? ? ? ? ? ⑨ webview—关于WebView的内存泄露,由于WebView在加载网页后会长期占用内存而不能被释放,处理办法:Activity销毁后要调用它的destory()方法来销毁它以释放内存。

? ? ? ? ? ? ? ? ⑩? 属性动画–引起内存泄漏主要是由于我们在activity中调用了属性动画,在页面关闭时却没有调用cancle方法,导致动画还在占着内存一直播放,所以呢处理办法:就是在activity销毁的时候调用cancle

? ? ? ? ? ? ? ? 11? 集合中的对象未清除—假如一个对象放入到集合中,这个集合就会持有该对象的引用。当我们不再需要这个对象时,也并没有将它从集合中移除,这样只需集合还在使用(而此对象已经无用了),这个对象就造成了内存泄露。并且假如集合被静态引用的话,集合里面那些没有用的对象更会造成内存泄露了。处理办法:在使用集合时要及时将不用的对象从集合remove,或者者clear集合,以避免内存泄漏。

? ? 二.内存溢出也就是OOM

? ? ? ? ? ? 其实内存溢出的本质就是内存泄漏,除了内存泄漏引起的内存溢出外还有就是

? ? ? ? ? ? ? ? ① 对象内存过大 比方bitmap–处理这个问题的关键点在于bitmap的压缩

? ? 三,代码中的注意细节

? ? ? ? 比方多使用少量优化过的数据结构–使用ArrayMap/SparseArray来代替HashMap,ArrayMap/SparseArray是专门为移动设施设计的高效的数据结构; 尽量少使用枚举;少使用string进行字符串拼接(可以用StringBuffer或者者StringBuilder代替String);少使用递归

好啦 就到这里吧

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » Android性能优化—-内存优化

发表回复