APP开发如何内存优化实操解决方法,深圳APP开发公司提醒各位APP开发爱好者,我们在APP项目制作时如果不解决内存优化问题,对我们后期程序运行会存在着许多问题,本文就与各位分享如何节省内存,以下是一些节省内存的方法。
(1)当UI不可见时,释放相关资源。在Activity的onPause()方法中停止动画、停止视频播放、停止获取和传递设备当前的经纬度给服务器等。在Activity的onStop()方法中取消当前界面的网络请求等。在onTrimMemory()方法中,接收到TRIM_MEMORY_UI_HIDDEN信号时释放UI使用的内存资源,如图片占据的内存,这样减少内存消耗,也可避免被系统回收此APP使用的内存。
注意:onTrimMemory()方法中的TRIM_MEMORY_UI_HIDDEN回调只有当程序中的所有UI组件全部不可见的时候才会触发,这和onStop()方法还是有很大区别的,onStop()方法只是当一个Activity完全不可见的时候调用,比如说用户打开了程序中的另一个Activity。可以在onStop()方法中去释放一些Activity相关的资源,如取消网络连接或者注销广播接收器等,但是像UI相关的资源应该一直要等到onTrimMemory(TRIM_MEMORY_UI_HIDDEN)这个回调之后才去释放,这样可以保证如果用户只是从程序的一个Activity回到了另外一个Activity,界面相关的资源都不需要重新加载,从而提升响应速度。
(2)在解码JPG、PNG和GIF等格式的图片时,通过设置图片位数可以有效减少使用的内存。如Glide中默认的图片解码位数是32位,也就是用4个字节描述一个像素点的数据。
publicstaticfinalDecodeFormatDEFAULT=PREFER_ARGB_8888
当APP检测到当前可用的内存少或屏幕的分辨率低时,可以降低图片的质量,就是降低图片的位数,如设置成PREFER_RGB_565,用2个字节描述一个像素的数据,这样消耗的内存少了一半。
(3)内存紧张时释放资源。对于运行中的程序,如果内存紧张,会在onTrimMemory(intlevel)回调方法中接收到以下级别的信号。TRIM_MEMORY_RUNNING_MODERATE:系统可用内存较低,正在杀掉LRU缓存中的进程。而当前进程正在运行,没有被杀掉的危险。
TRIM_MEMORY_RUNNING_LOW:系统可用内存更加紧张,程序虽然暂没有被杀死的危险,但是应该尽量释放一些资源,以提升系统的性能(这也会直接影响程序的性能)。TRIM_MEMORY_RUNNING_CRITICAL:系统内存极度紧张,而LRU缓存中的大部分进程已被杀死,如果仍然无法获得足够的资源的话,接下来会清理掉LRU中的所有进程,并且开始杀死一些系统通常会保留的进程,比如后台运行的服务等。当程序未在运行,并保留在LRU(Least-RecentlyUsed)缓存中时,在onTrimMemory(intlevel)中会返回以下级别的信号。TRIM_MEMORY_BACKGROUND:系统可用内存低,而程序处在LRU的顶端,因此暂时不会被杀死,但是此时应释放一些程序再次打开时比较容易恢复的UI资源。TRIM_MEMORY_MODERATE:系统可用内存低,程序处于LRU的中部位置,如果内存状态得不到缓解,程序会有被杀死的可能。TRIM_MEMORY_COMPLETE:系统可用内存低,程序处于LRU尾部,如果系统仍然无法回收足够的内存资源,程序将首先被杀死。此时应释放无助于恢复程序状态的所有资源。
(4)不要在执行频率很高的方法或者循环中创建对象,可以使用HashTable等创建一组对象容器,从容器中取那些对象,而不用每次new与释放。
(5)在代码中正式集成三方库时,最好要对库使用的内存进行评估。
(6)使用Android系统提供的优化过的数据结构。如SparseArray、SparseBooleanArray和LongSparseArray等,相比Java提供的HashMap,这些数据结构更节省内存。
(7)少用枚举变量,按Google官方文档的说法,枚举类型变量的内存消耗常比静态常量的2倍还多。
(8)尽量少使用static类型变量。static类型变量的生命周期其实是和APP的生命周期是一样的。大量使用的话,就会导致大量内存无法被释放,容易出现内存不足的情况。
(9)使用View缓存。在ListView和GridView中,列表中的很多项(convertView)是可以重用的,不需要每次调用getView方法都重新申请一次内存。
(10)当有较多的字符串需要拼接的时候,推荐使用StringBuffer类。(11)开启线程数量不易过多,一般与(机器内核数+1)一样最好,推荐开启线程的时候使用线程池。
(12)在加载网络图片的时候,使用软引用或者弱引用并进行本地缓存。
(13)慎用多进程,一个不执行任何任务的空进程至少也要占用1.4MB内存。(14)尽可能地复用资源,如Android系统本身有很多字符串、颜色、图片、动画、样式以及简单布局等资源可以
直接使用,同时要尽量复用style等资源以达到节约内存。
(15)尽量优化的代码,减少冗余代码。Java中每个类(包括匿名内部类)都占用至少500字节左右的代码。
(16)少用强引用,多用软引用或弱引用。好了,APP开发公司本文关于“APP开发如何内存优化实操解决方法”就分享到这里,谢谢关注,博纳网络编辑整理。