Android从5.0到9.0版本的主要变更
https://www.jianshu.com/p/10bdbf883c46?utm_source=desktop&utm_medium=timeline
Android5.0
1.虚拟机
在 Android 5.0 中,全面由Dalvik转用ART(Android Runtime)编译。大大提高了性能。
- 预先 (AOT) 编译
- 改进的垃圾回收 (GC)
- 改进的调试支持
2.Material Design 样式
采用全新Material Design设计,页面更加的美观,立体。
3.浮动通知
设备未锁定且其屏幕处于打开状态,通知可以显示在小型浮动窗口中,称为浮动通知。
4.绑定服务
启动或绑定服务必须显式启动,如果隐式启动,会引发下列异常:
Caused by: java.lang.IllegalArgumentException: Service Intent must be explicit
如果非要隐式启动,可以使用下列方案来避免异常:
val intent = Intent("Service对应的Action")
intent.`package` = packageName
bindService(intent,mServiceConnection,BIND_AUTO_CREATE)
Android6.0
1.运行时权限
用户可直接在运行时管理应用权限。这种模式让用户能够更好地了解和控制权限,同时为应用开发者精简了安装和自动更新过程。用户可为所安装的各个应用分别授予或撤销权限。
//检测某个权限是否已经被授予
//PackageManager.PERMISSION_GRANTE:获得权限
//PackageManager.PERMISSION_DENIED:为获得权限
ContextCompat.checkSelfPermission(Context context,String permission)
//申请权限
ActivityCompat.requestPermissions(Activity activity,String[] permissions, int requestCode)
//处理授权
onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults)
//解释说明权限的用途
ActivityCompat.shouldShowRequestPermissionRationale(Activity activity,String permission)
2.低电耗模式和应用待机模式
低电耗模式:如果用户拔下设备的电源插头,并在屏幕关闭后的一段时间内使其保持不活动状态,设备会进入
低电耗模式。 在该模式下设备会尝试让系统保持休眠状态。在该模式下,设备会定期短时间恢复正常工作,以便进行应用同步,还可让系统执行任何挂起的操作。应用待机模式:应用待机模式允许系统判定应用在用户未主动使用它时处于空闲状态。当用户有一段时间未触摸应用时,系统便会作出此判定。如果拔下了设备电源插头,系统会为其视为空闲的应用
停用网络访问以及暂停同步和作业。
在低电耗模式下,您的应用会受到以下限制:
- 暂停访问网络
- 系统忽略唤醒锁定
- 标准AlarmManager闹钟推迟到下一个维护期
- 系统不执行WLAN扫描
- 系统不允许运行同步适配器SyncAdapter
- 系统不允许运行JobScheduler
3.取消支持 Apache HTTP
Android 6.0版移除了对 Apache HTTP 的支持,推荐使用HttpURLConnection,因为它可以通过透明压缩和响应缓存减少网络使用,并可最大限度降低耗电量。
如果想继续使用Apache HTTP,必须先在build.gradle文件中如下声明:
android {
useLibrary 'org.apache.http.legacy'
}
Android7.0
1.文件访问权限
为了提高私有文件的安全性,应用私有目录被限制访问,此设置可防止私有文件的元数据泄漏,如它们的大小或存在性。
- 无法使用file://这样的形式访问文件,不然会报错
FileUriExposedException,现在改用FileProvide来访问文件。
<manifest>
...
<application>
...
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="com.mydomain.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>
...
</application>
</manifest>
file_paths.xml文件内容:
<resources xmlns:android="http://schemas.android.com/apk/res/android">
<paths>
<files-path path="files" name="files" />
<cache-path path="files" name="cache" />
...
</paths>
</resources>
- path:文件夹“相对路径”
- name:名称标志字符,不能重名。
| 标签 | 路径 |
|---|---|
| files-path | getFilesDir() |
| cache-path | getCacheDir() |
| external-path | Environment.getExternalStorageDirectory() |
| external-files-path | getExternalFilesDir() |
| external-cache-path | getExternalCacheDir() |
| external-media-path | getExternalMediaDirs() |
| root-path | / |
<files-path path="image" name="files" />:对应的文件路径为:getFilesDir() / image/
- DownloadManager不再按文件名分享私人存储的文件。
2.移除三项隐式广播
- CONNECTIVITY_ACTION:网络状态监听。
- ACTION_NEW_PICTURE:拍照广播
- ACTION_NEW_VIDEO:录视频广播
注意:移除的是
隐式广播。正在前台运行的应用程序如果在主线程中动态注册了该广播,该应用程序仍然可以接收到该广播。
3.进一步优化低电耗模式
Android 6.0引入了低电耗模式,当用户设备未插接电源、处于静止状态且屏幕关闭时,该模式会推迟 CPU和网络活动,从而延长电池寿命。而Android 7.0则通过在设备未插接电源且屏幕关闭状态下、但不一定要处于静止状态(例如用户外出时把手持式设备装在口袋里)时应用部分CPU和网络限制,进一步增强了低电耗模式。
Android8.0
1.后台执行限制
- 在后台运行的应用对后台服务的访问受到限制。
- 应用无法使用其清单注册大部分隐式广播。
如果在后台服务中调用startService(),则会抛出IllegalStateException。 调用Context.startForegroundService()将启动一个前台服务。即使应用在后台运行,系统也允许其调用 Context.startForegroundService()。不过,应用必须在创建服务后的五秒内调用该服务的startForeground()。
2.后台位置限制
为节约电池电量、保持良好的用户体验和确保系统健康运行,在运行Android 8.0的设备上使用后台应用时,降低了后台应用接收位置更新的频率。此行为变更会影响包括Google Play服务在内的所有接收位置更新的应用。
影响的API:
- Fused Location Provider (FLP)
- Geofencing
- GNSS Measurements
- Location Manager
- Wi-Fi Manager
3.通知

在Android 8.0中,我们已重新设计通知,以便为管理通知行为和设置提供更轻松和更统一的方式。这些变更包括以下内容:
- 通知渠道:
Android 8.0引入了通知渠道,其允许您为要显示的每种通知类型创建用户可自定义的渠道。用户界面将通知渠道称之为通知类别。
从Android 8.0(API 级别 26)开始,必须为所有通知分配渠道,否则通知将不会显示。通过将通知归类为不同的
渠道,用户可以停用您应用的特定通知渠道(而非停用您的所有通知),还可以控制每个渠道的视觉和听觉选项。
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
//创建通知渠道
val name = getString(R.string.channel_name)
val descriptionText = getString(R.string.channel_description)
val importance = NotificationManager.IMPORTANCE_DEFAULT
val mChannel = NotificationChannel(CHANNEL_ID, name, importance)
mChannel.description = descriptionText
//注册渠道
val notificationManager = getSystemService(NOTIFICATION_SERVICE) as NotificationManager
notificationManager.createNotificationChannel(mChannel)
}
- 通知标志:
Android 8.0引入了对在应用启动器图标上显示通知标志的支持。通知标志可反映某个应用是否存在与其关联、并且用户尚未予以清除也未对其采取行动的通知。通知标志也称为通知点(强迫症非常讨厌的东西)。 - 背景颜色:您现在可以设置和启用通知的背景颜色。只能在用户必须一眼就能看到的持续任务的通知中使用此功能。例如,您可以为与驾车路线或正在进行的通话有关的通知设置背景颜色。
- 消息样式:使用
MessagingStyle类的通知可在其折叠形式中显示更多内容。对于与消息有关的通知,您应使用MessagingStyle类。您还可以使用新的addHistoricMessage(),通过向与消息相关的通知添加历史消息为会话提供上下文。 - 通知清除:系统现在可区分通知是由用户清除,还是由应用移除。通过
NotificationListenerService类的onNotificationRemoved()。 - 休眠:用户可以将通知置于休眠状态,以便稍后重新显示它。重新显示时通知的重要程度与首次显示时相同。应用可以移除或更新已休眠的通知,但更新休眠的通知并不会使其重新显示。
- 通知超时:使用
setTimeoutAfter()创建通知时您可以设置超时。您可以使用此函数指定一个持续时间,超过该持续时间后,通知应取消。如果需要,您可以在指定的超时持续时间之前取消通知。
4.自适应图标
Android 8.0(API 级别 26)引入了自适应启动器图标,它可以在不同设备型号上显示为不同的形状。例如,在一台原始设备制造商 (OEM) 设备上,自适应启动器图标可显示为圆形,而在其他设备上则可显示为方圆形。每个设备的原始设备制造商 (OEM) 都会提供一个蒙版,系统使用该蒙版渲染所有具有相同形状的自适应图标。自适应启动器图标还会在快捷方式、“设置”应用、共享对话框和概览屏幕中使用。

Android9.0
1.电源管理
- 应用待机群组:系统将根据用户的使用模式限制应用对 CPU 或电池等设备资源的访问。
- 省电模式改进:开启省电模式后,系统会对所有应用施加限制。 这是一项已有的功能,但在
Android 9中得到了改进。
2.隐私权变更
后台对传感器的访问受限:Android 9限制后台应用访问用户输入和传感器数据的能力。 如果您的应用在运行 Android 9设备的后台运行,系统将对您的应用采取以下限制:
如果需要在运行
Android 9的设备上检测传感器事件,请使用前台服务。
限制访问通话记录:Android 9引入CALL_LOG权限组并将READ_CALL_LOG、WRITE_CALL_LOG和PROCESS_OUTGOING_CALLS权限移入该组。 在之前的Android版本中,这些权限位于PHONE权限组。
如果您的应用需要访问通话记录或者需要处理去电,则您必须向CALL_LOG权限组明确请求这些权限。 否则会发生SecurityException。
3.对使用非 SDK 接口的限制
为帮助确保应用稳定性和兼容性,此平台对某些非SDK函数和字段的使用进行了限制;无论您是直接访问这些函数和字段,还是通过反射或 JNI 访问,这些限制均适用。 在 Android 9 中,您的应用可以继续访问这些受限的接口;该平台通过 toast 和日志条目提醒您注意这些接口。 如果您的应用显示这样的 toast,则必须寻求受限接口之外的其他实现策略。
4.框架安全性变更
默认启用网络传输层安全协议 (TLS):默认使用https,会阻止http请求,如果想继续使用http可以在清单文件中做如下配置:
<application
...
android:usesCleartextTraffic="true">
...
</application>
5.Apache HTTP弃用
在Android 6.0 中,我们移除了对 Apache HTTP的支持。从· Android 9 开始·,该内容库已从 bootclasspath中移除,且默认情况下应用无法使用它。要继续使用Apache HTTP,以Android 9及更高版本为目标平台的应用可以向其 AndroidManifest.xml添加以下内容:
<uses-library android:name="org.apache.http.legacy" android:required="false"/>
6.前台服务
如果应用以Android 9或更高版本为目标平台并使用前台服务,则必须请求FOREGROUND_SERVICE权限。这是普通权限,因此,系统会自动为请求权限的应用授予此权限。
如果以Android 9或更高版本为目标平台的应用尝试创建前台服务且未请求FOREGROUND_SERVICE,则系统会抛出SecurityException。
KotlinAndroid
EShop
官方文档
作者:慕涵盛华
链接:https://www.jianshu.com/p/10bdbf883c46
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
Android从5.0到9.0版本的主要变更的更多相关文章
- [Android]Android端ORM框架——RapidORM(v2.0)
以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/5626716.html [Android]Android端ORM ...
- 【Android 系统开发】CyanogenMod 13.0 源码下载 编译 ROM 制作 ( 手机平台 : 小米4 | 编译平台 : Ubuntu 14.04 LTS 虚拟机)
分类: Android 系统开发(5) 作者同类文章X 版权声明:本文为博主原创文章 ...
- 关于The specified Android SDK Build Tools version (26.0.2) is ignored, as it is below the minimum...
今天将项目迁移到另一台笔记本,进行build出现以下问题,导致build失败 The specified Android SDK Build Tools version (26.0.2) is ign ...
- Android app 在线更新那点事儿(适配Android6.0、7.0、8.0)
一.前言 app在线更新是一个比较常见需求,新版本发布时,用户进入我们的app,就会弹出更新提示框,第一时间更新新版本app.在线更新分为以下几个步骤: 1, 通过接口获取线上版本号,versionC ...
- Eclipse编译Android项目时出现的问题:Android requires compiler compliance level 5.0 or 6.0. Found '1.8' instead.
Consle: Android requires compiler compliance level 5.0 or 6.0. Found '1.8' instead. Please use Andro ...
- [RK3288][Android6.0] 调试笔记 --- user版本默认显示开发者选项【转】
本文转载自:https://blog.csdn.net/kris_fei/article/details/70157137 Platform: ROCKCHIPOS: Android 6.0Kerne ...
- Android 升级安装APK兼容Android7.0,解决FileUriExposedException
我们在开发app时避免不了需要添加应用内升级功能.当app启动时,如果检测到最新版本,将apk安装包从服务器下载下来,执行安装.安装apk的代码一般写法如下,网上随处可以搜到 public stati ...
- Android 基于ijkplayer+Rxjava+Rxandroid+Retrofit2.0+MVP+Material Design的android万能播放器aaa
MDPlayer万能播放器 MDPlayer,基于ijkplayer+Rxjava+Rxandroid+Retrofit2.0+MVP+Material Design的android万能播放器,可以播 ...
- 解决AS加载gradle时出现的Could not find com.android.tools.build:gradle:3.5.0.的错误
时间:2019/12/7 最近在做安卓大作业时总是遇到从GitHub上下载下来的demo不能在本地Android studio中运行的问题,感觉真的被安卓中的各种版本给恶心到了,下面记录其中比较典型的 ...
- Android requires compiler compliance level 5.0 or 6.0. Found '1.4' instead的解决办法
今天在导入工程进Eclipse的时候竟然出错了,控制台输出的是: [2013-02-04 22:17:13 - takepicture] Android requires compiler compl ...
随机推荐
- minhash pyspark 源码分析——hash join table是关键
从下面分析可以看出,是先做了hash计算,然后使用hash join table来讲hash值相等的数据合并在一起.然后再使用udf计算距离,最后再filter出满足阈值的数据: 参考:https:/ ...
- 10分钟学会 linux awk命令
简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再 ...
- 基于h5+的微信登录,hbuilder打包
1.打开app项目的manifest.json的文件,选择模块权限配置,将OAuth(登录鉴权)模块添加至已选模块中 2.选择SDK配置,在plus.oauuth·登录鉴权中,勾选□ 微信登录,配置好 ...
- 最小费用流模板(zkw与spfa)
"zkw" 费用流算法在哪些图上慢(摘自https://www.cnblogs.com/ECJTUACM-873284962/p/7744943.html) 实践中, 上面的这个算 ...
- 运算符 & | ^ ~ >> << 讲解
字节”是byte,“位”是bit :1 byte = 8 bit : char 在java中是2个字节.java采用unicode,2个字节(16位)来表示一个字符. char 16位2个字节 byt ...
- IP地址与Mac地址绑定错误
有个application,有时候可以正常访问,有时候又返回404错误,百思不得其解.刚开始以为是文件夹权限问题,折腾了好久. 后来没在服务器上monitor到包,所以猜想是到了错误的mac地址,用a ...
- javaweb上传文件夹
我们平时经常做的是上传文件,上传文件夹与上传文件类似,但也有一些不同之处,这次做了上传文件夹就记录下以备后用. 首先我们需要了解的是上传文件三要素: 1.表单提交方式:post (get方式提交有大小 ...
- 搞清楚ourhdr.h是什么及运行第一个UNIX C程序
好多人开始学:UNIX 环境高级编程这本书时:看到书里面说的头文件ourhdr.h而找不到她在哪里:而且无法开始继续学习:其实这个就是系统的内核标准头文件: 而她的位置在:/usr/include/u ...
- 100: cf 878C set+并查集+链表
$des$Berland要举行 $n$ 次锦标赛,第一次只有一个人,之后每一次会新加入一个人.锦标赛中有 $k$ 种运动项目,每个人在这 $k$ 种项目上都有一个能力值,每次会选择任意两个还未被淘汰的 ...
- AutoCAD .NET二次开发(一)
其他话不多说,直接进入主题,既然是二次开发,当然是用CAD平台已经封装好了很多类,我们需要熟悉和使用它们.常用的AutoCAD .NET API的四个主要DLL文件是: 名称 作用 备注 AcDbMg ...