第一种策略,是释放显示相关的内存。这是我们针对系统APP采用的一种调优策略。 图形内容,俗称位图是非常占用内存的,针对位图,我们采用异步加载的方法,将位图内容信息和位图的状态信息分别进行存储,将内容信息存储到机身存储上,而 把状态信息保留在RAM上。当APP再次显示时,不需要重新测量、布局,只在绘画的时候再把位图的内容信息加载回来。为了保证快速启用后台应用,我们在系 统发出切换的时候就通知APP进行位图内容信息的加载。这样运行内存被占用的情况就得到很大的改善。

第二种策略,是压缩后台内存。我们发现,手机后台运行的大部分内存是不经常使用 的,但由于安卓的多任务机制,它们又不能被直接释放,于是我们对这些后台运行的内存采用了压缩策略。像ZIP文件压缩一样,我们对不常使用的内存进行压 缩,现在我们能够做到5:1的压缩幅度。压缩了后台内存,就给前台正在使用的应用腾出了内存空间,让前台应用跑得更爽。

第三种策略,是从系统底层去释放内存。我们知道,现在很多APP的绘图用的是硬件 绘图,硬件绘图是运行在GPU上的,GPU在做图片合成的时候会保留一些缓存。我们修改了系统的接口,把硬件绘图缓存释放掉,下次需要使用的时候再进行申 请,以达到压缩内存的目的。另外我们在JAVA内存管理机制中,也对冗余内存进行了释放。

第四种策略,是优化自启动管理。无论是系统应用还是第三方应用,MIUI都对应用的自启动进行了约束。我们对后台应用数量、后台进程数量和空进程数量进行管束,拉长应用自启动的周期,禁止不必要的启动,从而实现内存的合理利用和释放。

以上几种策略,在针对具体APP时,都会有不同的组合,有些可能只采用一种策略, 有些可能四种策略同时使用。据我们实测,在同等低内存机型中,进行过内存优化的小米设备,能比同等配置的其他品牌机型多运行3个以上后台应用——我们的设 备可以运行到12-14个后台应用,其他品牌则可能最多运行到第9个安卓系统就已经开始“杀”后台应用了。更重要的是,为了兼顾前台应用操作流畅性和后台 应用响应速度的平衡,我们将已经做过的内存优化策略的具体参数设计为可配置,可以随时进行修改。

据我们观察,小米是目前唯一一家具备内存优化能力的手机厂商,后台内存压缩技术甚 至优于源生Android。通过把各类应用的“欲望”关到一个笼子里,尽量让他们不会“穷凶恶极”地征用内存,保证用户在使用手机的时候感觉到“爽”,这 是我们项目组成立时的初衷,现在来看,成效是明显的。不过由于安卓的开放性,及应用们难以填满的欲望,我们将会持续优化,给予用户最佳操控体验。

android内存优化相关1的更多相关文章

  1. Android内存优化相关

    Android的内存管理方式 Android系统内存分配与回收方式 一个APP通常就是一个进程对应一个虚拟机 GC只在Heap剩余空间不够时才去垃圾回收 GC触发时,所有线程都会被暂停!!! APP内 ...

  2. 【腾讯Bugly干货分享】Android内存优化总结&实践

    本文来自于腾讯Bugly公众号(weixinBugly),未经作者同意,请勿转载,原文地址:https://mp.weixin.qq.com/s/2MsEAR9pQfMr1Sfs7cPdWQ 导语 智 ...

  3. [转]探索 Android 内存优化方法

    前言 这篇文章的内容是我回顾和再学习 Android 内存优化的过程中整理出来的,整理的目的是让我自己对 Android 内存优化相关知识的认识更全面一些,分享的目的是希望大家也能从这些知识中得到一些 ...

  4. 大礼包!ANDROID内存优化(大汇总)

    写在最前: 本文的思路主要借鉴了2014年AnDevCon开发者大会的一个演讲PPT,加上把网上搜集的各种内存零散知识点进行汇总.挑选.简化后整理而成. 所以我将本文定义为一个工具类的文章,如果你在A ...

  5. ANDROID内存优化——大汇总(转)

    原文作者博客:转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! ANDROID内存优化(大汇总——上) 写在最前: 本文的思路主要借鉴了20 ...

  6. ANDROID内存优化(大汇总——中)

    转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! 写在最前: 本文的思路主要借鉴了2014年AnDevCon开发者大会的一个演讲PPT,加上 ...

  7. Android内存优化(三)详解内存分析工具MAT

    前言 在这个系列的前四篇文章中,我分别介绍了DVM.ART.内存泄漏和内存检测工具的相关知识点,这一篇我们通过一个小例子,来学习如何使用内存分析工具MAT. 1.概述 在进行内存分析时,我们可以使用M ...

  8. Android内存优化(二)解析Memory Monitor、Allocation Tracker和Heap Dump

    前言 要想做好内存优化工作,就要掌握两大部分的知识,一部分是知道并理解内存优化相关的原理,另一部分就是善于运用内存分析的工具.本篇就来介绍内存分析工具:Memory Monitor.Allocatio ...

  9. Android内存优化(四)解析Memory Monitor、Allocation Tracker和Heap Dump

    相关文章 Android性能优化系列 Java虚拟机系列 前言 要想做好内存优化工作,就要掌握两大部分的知识,一部分是知道并理解内存优化相关的原理,另一部分就是善于运用内存分析的工具.本篇就来介绍内存 ...

随机推荐

  1. lua对模块接口扩展的一种方法

    module lua中模块的实现,对于使用者来说就是一个库,引用此库后,可以调用库中实现的任意函数. 使用库,可以将一类功能相关的接口做封装,并提供开放接口. 参考: http://blog.codi ...

  2. object_id的用法

    OBJECT_ID: 返回数据库对象标识号. 语法 OBJECT_ID ( 'object' ) 参数 'object' 要使用的对象.object 的数据类型为 char 或 nchar.如果 ob ...

  3. Effective C++ 6.继承与面向对象设计

    //条款32:确定你的public继承塑模出is-a关系 // 1.public继承意味着is-a的关系,适用在基类上的方法都能用于派生类上. //条款33:避免遮掩继承而来的名称 // 1.在pub ...

  4. Leetcode: Arithmetic Slices

    A sequence of number is called arithmetic if it consists of at least three elements and if the diffe ...

  5. Codeforce Round #213 Div2

    哎,弄了半天这次的C还是没出,真是捉急!,还TM的以为前几次只是运气不好!太逗了!

  6. bzoj4216 Pig

    水题,题目难点大概就是空间限制上了,开longlong会爆,可以开个int数组求前缀和,然后一旦绝对值超过20亿,则将其取模,并记录下当前位置,这样询问时就可以二分这些超过的位置,将其乘以20亿后加上 ...

  7. c语言小程序

    这是一个用c语言写的小程序,功能是随机输出30道100以内的四则运算,先生成两个随机数,再通过随机数确定四则运算符号,最后输出题目. #include<iostream> using na ...

  8. Oracle游标总结三

    -- 声明游标:CURSOR cursor_name IS select_statement --For 循环游标--(1)定义游标--(2)定义游标变量--(3)使用for循环来使用这个游标,for ...

  9. PAT乙级 1018. 锤子剪刀布 (20)

    1018. 锤子剪刀布 (20) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 大家应该都会玩“锤子剪刀布”的游 ...

  10. PDO讲解

    PDO的知识点标注在代码里 <?php //造DSN:驱动名:dbname=数据库名:host=服务器地址 $dsn="mysql:dbname=mydb;host=localhost ...