小伙伴们,咱们今天咱继续对Android8.0的适配进行分解,今天将针对启动页,版本适配和系统限制等进行“啃食”

猛戳这里查看Android8.0适配那点事(一)

1、启动页适配

近日,我无意中发现应用在8.0系统上面启动页崩溃,赶紧去找BUG,运行后发现如下异常:

翻译后意思是:只有全屏不透明的activity才可以设置方向;

解决方案如下:

1.1、如果不考虑配置屏幕方向的话,直接将android:screenOrientation="portrait" 去掉即可;

1.2、如果既要固定屏幕方向,又解决启动过慢导致的白(黑)屏问题,那么可以找到你设置透明的Activity,然后在他的theme中将android:windowIsTranslucent改为false,再加入<item name="android:windowDisablePreview">true</item>;

1.3、参考Google给出的解决方案:不要禁用预览窗口,而要遵循常见的 Material Design模式。您可以使用活动的 windowBackground主题属性为开始活动提供简单的自定义绘图.

2、8.0版本安装适配

android 8.0系统更新之后,未知应用安装权限的开关被除掉,取而代之的是未知来源应用的管理列表,需要用户给予允许app安装未知来源应用的权限;

2.1、添加权限

<!--装未知来源应用的权限-->

<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>

2.2、然后在用户点击更新时判断是否开启了该应用的“允许安装未知来源”的权限,没有的话,就引导用户去开启该应用的“允许安装未知来源”的权限

注意:此处如果自己实现版本更新,需配合通知渠道,进行版本下载进度显示

3、运行时权限策略变化

在 Android 8.0 之前,如果应用在运行时请求权限并且被授予该权限,系统会错误地将属于同一权限组并且在清单中注册的其他权限也一起授予应用,在8.0中此行为被纠正,系统只会授予应用明确请求的权限;

同组权限一起申请:

8.0中引入了多个与电话有关的新权限:

  • ANSWER_PHONE_CALLS 允许您的应用通过编程方式接听呼入电话。要在您的应用中处理呼入电话,您可以使用 acceptRingingCall() 函数。

  • READ_PHONE_NUMBERS 权限允许您的应用读取设备中存储的电话号码。

这些权限均被划分为危险类别,属于 PHONE 权限组。

1、后台执行限制

1.1、后台服务限制:处于空闲状态时,应用可以使用的后台服务存在限制。 这些限制不适用于前台服务,因为前台服务更容易引起用户注意;

1.2、广播限制:除了有限的例外情况,应用无法使用清单注册隐式广播。 它们仍然可以在运行时注册这些广播,并且可以使用清单注册专门针对它们的显式广播。

注意:默认情况下,这些限制仅适用于针对 O 的应用。 不过,用户可以从 Settings 屏幕为任意应用启用这些限制,即使应用并不是以 O 为目标平台。

2、后台服务限制

系统可以区分 前台 和 后台 应用。 (用于服务限制目的的后台定义与内存管理使用的定义不同;一个应用按照内存管理的定义可能处于后台,但按照能够启动服务的定义又处于前台。)如果满足以下任意条件,应用将被视为处于前台:

  • 具有可见 Activity(不管该 Activity 已启动还是已暂停)。

  • 具有前台服务。

  • 另一个前台应用已关联到该应用(不管是通过绑定到其中一个服务,还是通过使用其中一个内容提供程序)。 例如,如果另一个应用绑定到该应用的服务,那么该应用处于前台:

    • IME

    • 壁纸服务

    • 通知侦听器

    • 语音或文本服务

如果以上条件均不满足,应用将被视为处于后台。

后台服务会被kill掉,官方推荐可使用AlarmManager、SyncAdapter、JobScheduler代替后台服务。

3、广播限制

如果应用注册为接收广播,则在每次发送广播时,应用的接收器都会消耗资源,在7.0中对广播施加了一些限制,8.0 让这些限制更为严格:

  • 针对 Android 8.0 的应用无法继续在其清单中为隐式广播注册广播接收器;

  • 应用可以继续在它们的清单中注册显式广播;

  • 应用可以在运行时使用 Context.registerReceiver() 为任意广播(不管是隐式还是显式)注册接收器;

  • 需要签名权限的广播不受此限制所限,因为这些广播只会发送到使用相同证书签名的应用,而不是发送到设备上的所有应用。

4、后台位置限制

  • Android 8.0 都会对后台应用检索用户当前位置的频率进行限制(会出现后台应用定位收不到定位信息);

(注:以上内容引自Google中国开发者网站:https://developer.android.google.cn)

新系统在手,还需多多了解其中的变化,以我们自身的能力来解决实际开发过程中的问题,各位小伙伴,你们的应用在适配8.0的过程中遇到了哪些问题,欢迎留言,共同探讨并解决。如文中有误,请留言指出.

Android8.0适配那点事(二)的更多相关文章

  1. Android8.0适配那点事(一)

    最近有小伙伴说,7.0适配整了一波,现在又要来适配8.0,真是一波未平一波又起 但是作为开发者来说,学无止境,不跟上时代的步伐,肯定会被时代所淘汰... 话说Android P已经在路上了,你准备好了 ...

  2. Android8.0运行时权限策略变化和适配方案

    版权声明:转载必须注明本文转自严振杰的博客:http://blog.yanzhenjie.comAndroid8.0也就是Android O即将要发布了,有很多新特性,目前我们可以通过AndroidS ...

  3. fir.im Weekly - 关于 Log Guru 开源、Xcode 探索和 Android7.0 适配

    本期 fir.im Weekly 整理了最近的一些技术分享,包括关于 Log Guru 开源.Xcode 探索. Android7.0 适配等等 iOS/Android 相关的工具.源码分享和技术文章 ...

  4. Android深入四大组件(四)Android8.0 根Activity启动过程(前篇)

    前言 在几个月前我写了Android深入四大组件(一)应用程序启动过程(前篇)和Android深入四大组件(一)应用程序启动过程(后篇)这两篇文章,它们都是基于Android 7.0,当我开始阅读An ...

  5. Android:Mstar Android8.0平台音量控制流程

    一.Speaker 音量.静音流程分析 java层音量设置首先调用到的是AudioManager.java中的方法,在这里有两种方法可以设置音量 setStreamVolume 和 adjustStr ...

  6. [转]Android 应用自动更新及6.0,7.0,8.0适配安装

    原贴:https://www.jianshu.com/p/ea42040c7ace 原贴:https://www.jianshu.com/p/ea42040c7ace 原贴:https://www.j ...

  7. android 8.0 适配(总结)

    android 8.0 对应的 sdk 版本  26 1. 通知栏 Android 8.0 引入了通知渠道,其允许您为要显示的每种通知类型创建用户可自定义的渠道.用户界面将通知渠道称之为通知类别. 针 ...

  8. Android5.0和Android6.0适配

    gradle配置项 compileSdkVersion 用哪个 Android SDK 版本编译你的应用.因此我们强烈推荐总是使用最新的 SDK 进行编译.在现有代码上使用新的编译检查可以获得很多好处 ...

  9. Android8.0 后台服务保活的一种思路

    原文地址:Android8.0 后台服务保活的一种思路 | Stars-One的杂货小窝 项目中有个MQ服务,需要一直连着,接收到消息会发送语音,且手机要在锁屏也要实现此功能 目前是使用广播机制实现, ...

随机推荐

  1. 01背包-记忆化搜索到成型的DP

    记忆化搜索 #include<bits/stdc++.h> using namespace std; typedef long long ll; int n,W; int dp[105][ ...

  2. 20190416 OSX系统使用VMware Fusion安装CentOS7踩的那些坑

    一.创建虚拟机 (1)在虚拟机资源库中点击[+添加]按钮,选择“新建...”选项 (2)选择创建自定义虚拟机 (3)选择系统类型为CentOS (4)选择虚拟磁盘类型 (5)选择虚拟机存储位置:点击[ ...

  3. windows mobile ,wince 系统,用代码启动cab文件安装

    有时候需要用代码来启动安装cab,以下是代码.不能实现静默安装. 启动后会提示用户是否安装,需要用户点击是才行. using System; using System.Collections.Gene ...

  4. Mac下安装eclipse(Mac 10.12/JDK/tomcat)

    1.到官网https://www.eclipse.org/downloads/eclipse-packages/下载安装包 2.安装 注意:安装ecllipse时一定要安装JDK先,最新版本的ecli ...

  5. php在单个文件内开启dbug

    1.在文件开头添加如下代码 ini_set('display_errors', true); error_reporting(E_ALL);

  6. Hibernate核心开发接口_SessionFactory详解

    SessionFactory: a)  用来产生和管理Session b)通常情况下每个应用只需要一个SessionFactory c)除非要访问多个数据库的情况 d) 关注两个方法即:  openS ...

  7. java算法----------二叉树的遍历

    二叉树的遍历分为前序.中序.后序和层序遍历四种方式 首先先定义一个二叉树的节点 //二叉树节点 public class BinaryTreeNode { private int data; priv ...

  8. CentOS 7_64位系统下搭建Hadoop_2.8.0分布式环境

    准备条件: CentOS 7 64位操作系统 | 选择minimal版本即可(不带可视化桌面环境),也可以选择带完整版Hadoop-2.8.0 | 本文采用的是Hadoop-2.8.0版本.JDK1. ...

  9. R语言多元素向量

    使用冒号运算带有数值数据(数值的增加为1) # Creating a sequence from 5 to 13. v <- 5:13 print(v) # Creating a sequenc ...

  10. Android OpenGL教程-第六课【转】

    第六课 纹理映射: 在这一课里,我将教会你如何把纹理映射到立方体的六个面. 激动的时刻来了,加载图片了. 复习一下android加载图片的知识.放一个png到drawable里面. (图片文件名:ne ...