Android 4.4-7.0 apk的更新换代策略

(一)Android 4.4 使用的是Dalvik虚拟机配合JIT (just in time)即时编译器,当app运行时,JIT编译器对新类进行编译,生成原生型指令码,这样在下次执行时相同逻辑就会速度更快。
JIT优点 :安装速度快占用空间小
JIT缺点:运行时编译开销大,容易造成卡顿,也就是以前生成apk的时候会很卡顿很慢。
 
        (二)在Android5.0以后google 放弃了Dalvik转投ART (Android Runtime)虚拟机,编译策略有由来的JIT变成了AOT(Ahead of Time)。
 
 
        ART策略是在第一次安装的时候,字节码就会预先编译成原生型指令码,使得其成为真正的本地应用。以后运行App不再需要进行编译,启动速度和运行速度都增加了提高,也就减少了卡顿感。
缺点是:安装时间长,消耗更多存储空间。
 
        (三)在Android 7.0开始,google结合了以前两种编译策略的优缺点,形成了新的Hybrid Mode 即是混合编译,AOT+JIT模式:
 
        在Android 7.0中,安装应用时不再像6.0那样对应用代码进行完整的预编译,而是会根据JIT编译器的分析结果,在设备充电或其余空闲时间对“cold code”进行解释,对于“hot code”,则在实际使用时由JIT进行编译,因此应用安装时间和占用空间大大减少了,像手机淘宝这个APP在Android 7.0系统中的占用大小为156MB,和Android 4.4系统中非常接近。主要的是,它还不会影响到应用的运行速度。
 
   在Android 7.0,采用了AOT + JIT混合编译策略,带来的好处如下:
﹒APP安装时间大幅缩短,只有Android 6.0系统的50%;
﹒系统升级OTA速度加快,不再需要优化;
﹒应用占用空间更少,一般会少10%;
﹒降低系统开销,改善电池消耗。
 
   从2018年8月开始 所有向google play提交的新app必须针对andorid 8.0(api 26)开发。

早于 Android 6.0 (API 等级 23)

下文列举内容适用于针对 Android 6.0 或更高版本平台开发的应用:

  • 在运行时请求权限

- 危险权限只可以在运行时被授予。应用的 UI 流必须提供相应可供性向用户请求这些权限;

- 但凡可能,您的应用要准备好应对权限请求被拒的情况。譬如说,如果某个用户拒绝您的应用访问设备 GPS,应用须通过其它方法继续运行。

 

早于Android 7.0 (API 等级 24)

下文列举内容适用于针对 Android 7.0 或更高版本平台开发的应用:

  • Doze 以及应用待机模式:

请根据《Doze 以及应用待机模式优化》一文中的相关描述设计您的 app,文章涵盖适用几个 Android 版本的逐步变更。

当设备进入 Doze 或者待机模式时,会产生下述系统行为:

- 网络访问限制;

- 推迟应用的 alarms、syncs 和 jobs;

- GPS 以及 Wi-Fi 扫描限制;

- 普通优先级 Firebase Cloud Messaging 消息限制;

  • 权限变更

- 系统将限制访问应用私有目录;

- 在应用外公开 file://URI会导致 FileUriExposedException。开发者可以使用 FileProvider 在应用间进行文件共享;

  • 系统阻止应用链接非 NDK 库。

早于 Android 8.0 (API 等级 26)

下文列举内容适用于针对 Android 8.0 或更高版本平台开发的应用:

  • 后台执行限制 (Background Execution Limits)

- 若您的应用不运行在前台,系统将会限制服务:

   ·· 当应用试图调用 startService() 而 startService 又被禁止时,startService() 会抛出异常;

   ·· startForegroundService() 应用必须使用 startForeground() 和 startForegroundService() 函数启动前台服务;

   ·· 请前往 Android 8.0 (API 等级 26) 《行为变更》页面,仔细阅读关于 JobScheduler API 的变更;

   ·· Firebase Cloud Messaging 要求 10.2.1 或更高版本的 Google Play 服务 SDK;

   ·· Firebase Cloud Messaging documentation 在使用 Firebase Cloud Messaging 时,消息投递受限于后台执行限制。若消息接收需要必要后台工作,如后台数据同步,您的应用须要通过 Firebase Job Dispatcher 或者 JobIntentService 调度任务。详情请阅览《Firebase Cloud Messaging 文档》。

- 隐式广播限制:

   ·· 系统会限制隐式广播。有关处理后台事件详情,请阅读 JobSechduler API 文档;

   ·· 后台位置限制;

   ·· 后台运行的应用访问位置数据受限;

      支持 Google Play 服务的设备可以通过 fused location provider 定期获取位置更新。

  • 通知渠道

- 您应该为每个渠道分别定义通知中断设特性:

   ·· 您必须将通知分配到某一渠道 (channel),以便通知显示;

   ·· 该版本 Android 平台支持 NotificationCompat.Builder;

  • 隐私

- ANDROID_ID 会根据每个应用签署密钥确定作用域。

 

 
 
 
 
 
posted @ 2018-03-22 12:08  想不起来的角落  阅读(932)  评论(0编辑  收藏  举报