来源|积木zz
前言
今天分享的面试题是:
Android在版本迭代中,总会进行很多改动,那么你熟知各版本都改动了什么内容?又要怎么适配呢?
Android4.4
- 发布
ART
虚拟机,提供选项可以开启。 HttpURLConnection
的底层实现改为了OkHttp。
Android5.0
ART
成为默认虚拟机,完全代替Dalvik虚拟机。Context.bindService()
方法需要显式 Intent,如果提供隐式 intent,将引发异常。
Android6.0
- 增加运行时权限限制
如果你的应用使用到了危险权限,比如在运行时进行检查和请求权限。checkSelfPermission()
方法用于检查权限,requestPermissions()
方法用于请求权限。
- 取消支持Apache HTTP
Android 6.0 版移除了对 Apache HTTP
相关类库的支持。要继续使用 Apache HTTP API,您必须先在 build.gradle 文件中声明以下编译时依赖项:
android {useLibrary 'org.apache.http.legacy'}
有的小伙伴可能不熟悉这是啥,简单说下:
Apache HttpClient 是Apache开源组织提供的一个开源的项目,它是一个简单的HTTP客户端(并不是浏览器),可以发送HTTP请求,接受HTTP响应。
所以说白了,其实就是一个请求网络的项目框架。
Android 7.0
Android 7.0 引入一项新的应用签名方案 APK Signature Scheme v2
Toast导致的BadTokenException
在Android7.0系统上,Android 框架强制执行了 StrictMode API 政策禁止向你的应用外公开 file:// URI。如果一项包含文件 file:// URI类型 的 Intent 离开你的应用,应用失败,并出现
FileUriExposedException
异常,如调用系统相机拍照录制视频,或裁切照片。
这一点其实就是限制了在应用间共享文件,如果需要在应用间共享,需要授予要访问的URI临时访问权限,我们要做的就是注册FileProvider
:
1)声明FileProvider。
<providerandroid:name="android.support.v4.content.FileProvider"android:authorities="app的包名.fileProvider"android:grantUriPermissions="true"android:exported="false">
<meta-dataandroid:name="android.support.FILE_PROVIDER_PATHS"android:resource="@xml/file_paths" />
provider>
2)编写xml文件,确定可访问的目录
<paths xmlns:android="http://schemas.android.com/apk/res/android">
//代表设备的根目录new File("/");
<root-path name="root" path="." />
//context.getFilesDir()
<files-path name="files" path="." />
//context.getCacheDir()