前言
Google正式发布Android Oreo(Go版,下简称Android Go)。Android Go是基于Android Oreo做了大量改造的精简版系统,可在512MB或1GB内存设备流畅运行。Google介绍其为低端设备而生且Google前几年推出的Android One也为低端设备而生。Google虽不断优化安卓系统降低设备最低配置要求,但低配设备流畅使用不切实际。
Android Go
Android One
摩尔定律
英特尔创始人之一戈登·摩尔提出。价格不变时集成电路可容纳元器件数目约隔18-24个月增一倍且性能同提一倍。通俗讲即同价以后能买比当下高性价比设备。
安迪比尔定律
对IT产业软硬升级换代关系概括。Andy gives,Bill takes away(安迪提供什么,比尔拿走什么),意指硬件性能提高很快被软件消耗掉。安迪指英特尔前CEO安迪·格鲁夫,比尔指微软前任CEO比尔·盖茨。
生产者和消费者
从硬件生产厂商角度,系统没很好消耗硬件性能则继续研发更高性能设备所耗成本极可能无用户买单,进而打击厂商研发生产积极性,接踵而至整产业发展停滞甚至倒退。好在从软件研发人员角度,产品版本迭代过程不断增加更复杂功能,这些功能消耗硬件所供性能。性能当资源则硬件升级即不断生产资源,软件升级则不断消费资源,即典型生产者消费者模型。
ROM
安卓手机发展初期应用争做保活,大量推送致新机很快卡顿。故各大厂家纷纷定制ROM(如各种反保活策略)。
总结
回到文章开头话题,Android Go仅一为在低配设备运行精简版系统,功能有限,更好用则硬件提升必不可少。
Android Ore(Go edition)
简介:
Android Go并不是一个独立的操作系统,它只是Android O的一种轻量级配置方案,专为1GB以下内存的机型设计,
在这种设置下,一些消耗大量资源的功能将被关闭,同时预装的应用也是轻量级的,不会消耗大量系统资源和数据流量。Google在会上并没有说到相关Android Go上的功能的变化,但可以想象到,必定会有部分占用太多资源的非必要的一些功能拿掉,如果在没有功能缺失的情况下,入门级设备的性能就能得到很棒的优化,那么就不会出现Android Go, 而将会是一个非常nice的Android O。而具体的内容,需要等其发布之后才能去一探其究。
Go版本的优化的三个方向:
1. OS
改善了整个平台的内存使用情况,确保app能够在1GB以下内存的设备上高效的运行。据说,Go版本减少了大约一半的存储空间。
2. APP
增加了新的硬件功能常量,能够灵活区分出是为正常还是低内存设备设计的应用软件。
java
PackageManager.FEATURE_RAM_LOW = "android.hardware.ram.low" //RAM <= 1GB
ActivityManager.isLowRamDevice() return true;
PackageManager.FEATURE_RAM_NORMAL = "android.hardware.ram.normal"
Googel重新设计适合Go版本的应用, 使之占用更少的内存,在低端机上有更好的表现,包括包括YouTube Go、谷歌地图Go、Gmail Go等, 同时, 谷歌还专门为Android Go开发了几个新应用, 比如Google Go和Files Go。Google Go是一款修改版的Google Lite应, 能够让用户更容易的找到流行信息、网站和应用程序,转换Gif动画和文字。而Files Go则是一款文件管理器, 可以让用户管理智能手机的存储空间。
3. Googel Play
AndroidOreo Go平台的Play Store商店与普通的Google Play商店所有内容一样,但更适合低存储容量设备。
谷歌额外增加了一个特色应用板块,专门为Android Go设备推荐轻便、好用、适合的应用。通过 Googel Play的一些应用为开发者
提供优化经验和开发指南。
如何针对运行于Go版本的设备优化APP?
为了确保应用能够在Android Go版本上良好的运行,需要参考以下指导意见:
1. 需要在manifest添加声明: java
<uses-feature android:name="android.hardware.ram.low" android:required="true"/>
2. targetSdkVersion应该是Android最新的版本,Android Go设备只能运行在API 26及其以上的版本。
3. 设备上的应用程序大小应该小于40MB。
4. 应用程序内存使用的PPS(Proportional Set Size)不应该超过50MB,
游戏内存使用的PPS不应该超过150MB。
——PSS:实际使用的物理内存,按比例分配共享库占用的内存。
5. 应用程序的启动时间最小,应在5s之内。
6. 有效的使用内存(看下一标题)。
补充:通过dumpsys命令可以查看到app的内存信息,如图,可以看到PPS值是:42168
如何有效的使用内存?
好的内存管理才能使APP运行得更稳定、性能更好。
减少低成本设备上的内存占用
- 动态调整内存的占用,确保不同RAM设备之间的兼容。
- 利用isLowRamDevice()和getMemoryClass()来确定运行时内存限制,通过这些信息,缩小内存的使用。
比如:在低内存设备上使用低分辨率的图片。 - 管理应用内存(具体内容可参考Googel开发者平台)。
避免长时间运行的进程
长时间运行的进程驻留在内存中,会降低设备的内存,大多数情况下,APP的运行过程应该是:
通过某个事件唤醒APP;处理数据;关闭。
可以使用 Firebase Cloud Messaging (FCM) 和 GcmNetworkManager来避免长时间运行的后台服务,减少设备的内存压力。
内存使用的检查
利用Android Studio提供的Memory Profiler tool,能够在设备运行时监控内存的使用情况。
可以帮助捕获无意的内存占用增长,使用该工具执行以下操作:
找出不希望的GC事件是否会导致性能问题。
识别无必要地获取或保持分配的对象类型。
确定代码中可能存在问题的地方。