美文网首页我爱编程
android 内存优化

android 内存优化

作者: 破晓11 | 来源:发表于2018-04-16 14:51 被阅读0次

    android内容优化之道

    1.共享内存

    android尝试跨进程共享ram页,分配和回收内存

    每个进程都被限制到一个单一的虚拟内存范围内

    Dalvik堆不会压缩堆的逻辑空间,这意味着Android不会进行碎片整理来腾出空间,只有空闲空间在堆的尾部时(at the end of the heap),Android才可以压缩逻辑堆的空间。但这并不意味着堆使用的物理内存不能被压缩

    当App内存达到了空间最大值,并尝试分配更多的内存,就会发生oom

    用户切换APP时,Android会使用LRU缓存来保存那些被切换的APP而不是使用交换空间来实现

    在开发的所有阶段你都应该考虑RAM的限制,即使是在设计阶段,你还没有开始编码工作。你应该使用以下技术来管理你的APP内存。

    app内存优化 :

    减少service的使用,因为service不使用的时候,还在后台运行,会占用内存,当service没有占用的时候一定要结束service,

    当用户界面隐藏时,释放内存

    当用户退出UI界面时,使用onTrimMemory()回调函数,你应该使用这个方法去监听TRIM_MEMORY_UI_HIDDEN这个值,他表示UI界面当前正在隐藏,使用被UI界面占用的内存

    app所有的界面都隐藏时,才会在OnTrimMemory()回调函数中检测到TRIM_MEMORY_UI_HIDDEN这个值,与onStop不同,onStop是界面隐藏时调用

    内存紧张时,释放内存

    检查你应该使用多少内存

    不同的安卓数量有着不同的内存,使用getMemoryClass获得可以使用内存大额大小

    使用bitmaps避免内存浪费,当你加载一张bitmap时,如果他分辨率过高

    使用最佳的数据容器:如sparseArray,sparseBooleanArray,sparseLongArray,避免对键值对的装箱,普通的hashmap会花费更多的内存,因为他需要为每一个映射分配一个实体

    注意内存开销

    尽量避免使用枚举类型,枚举类型占用空间是普通类型的两倍。

    小心代码抽象化

    抽象化需要更多的代码来执行他,需要更多的开销

    为序列化数据使用nano protobufs

    数据缓冲区是一种有谷歌序列化而设计的泛语言

    不要依赖注入框架

    使用proGuard来去除不必要的代码

    在最终生成的apk文件使用zipalign,通过androidMainFest.xml文件中声明的android:process来为应用分身,是你的service运行在一个单独的进程中

    相关文章

      网友评论

        本文标题:android 内存优化

        本文链接:https://www.haomeiwen.com/subject/ujfekftx.html