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

 增加了新的硬件功能常量,能够灵活区分出是为正常还是低内存设备设计的应用软件。

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添加声明:
<uses-feature android:name="android.hardware.ram.low" android:required="true"/>
  1. targetSdkVersion应该是Android最新的版本,Android Go设备只能运行在API 26及其以上的版本。
  2. 设备上的应用程序大小应该小于40MB。
  3. 应用程序内存使用的PPS(Proportional Set Size)不应该超过50MB,
    游戏内存使用的PPS不应该超过150MB。
    ——PSS:实际使用的物理内存,按比例分配共享库占用的内存。
  4. 应用程序的启动时间最小,应在5s之内。
  5. 有效的使用内存(看下一标题)。
    补充:通过dumpsys命令可以查看到app的内存信息,如图,可以看到PPS值是:42168
    Android Go初探
    pss1.png

如何有效的使用内存?

 好的内存管理才能使APP运行得更稳定、性能更好。

减少低成本设备上的内存占用

  1. 动态调整内存的占用,确保不同RAM设备之间的兼容。
  2. 利用isLowRamDevice()和getMemoryClass()来确定运行时内存限制,通过这些信息,缩小内存的使用。
    比如:在低内存设备上使用低分辨率的图片。
  3. 管理应用内存(具体内容可参考Googel开发者平台)。

避免长时间运行的进程

 长时间运行的进程驻留在内存中,会降低设备的内存,大多数情况下,APP的运行过程应该是:
通过某个事件唤醒APP;处理数据;关闭。
可以使用 Firebase Cloud Messaging (FCM) 和 GcmNetworkManager来避免长时间运行的后台服务,减少设备的内存压力。

内存使用的检查

 利用Android Studio提供的Memory Profiler tool,能够在设备运行时监控内存的使用情况。
可以帮助捕获无意的内存占用增长,使用该工具执行以下操作:
 找出不希望的GC事件是否会导致性能问题。
 识别无必要地获取或保持分配的对象类型。
 确定代码中可能存在问题的地方。


http://blog.csdn.net/wsq_tomato/article/details/78934573

上一篇:kafka删除topic的方法


下一篇:Python搭建新冠肺炎预测模型全解读