一 . RunTime Permission (运行时权限)
这一点是与之前有很大的不同,之前的权限都是在清单文件中申请,在安装的时候由用户一次授权完成。6.0的版本把部分权限改成了在程序运行的过程中去动态的向用户申请。这部分的用法较多,以后详细说明。这个功能只有在申明targetSDKVersion >= 23 的才会生效
二 .睡眠模式 APP的待机模式
睡眠模式:手机没有插电并且是静止的,屏幕关闭一段时间后,系统进入睡眠模式。睡眠模式下,它将阻止APP进行网络读取,推迟预定的job,sycs,已经标准闹钟。APP的活动只是推迟了,系统还是间断的来允许这些功能执行,之后再次进入睡眠模式。如果一直处于睡眠,APP被唤醒的等待时间会越来越长。打个比方,如果一分钟后唤醒APP一次,,第二次是三分钟后,第三次可能就是十分钟后了,大概就是这种工作模式。
如果移动手机,点击屏幕,插上电源,系统就退出了睡眠模式。
APP的待机模式:当一段时间不点击APP的时候。允许系统决定是否将APP设置为闲置的。闲置的APP的行为就类似于进入睡眠模式后的APP行为了。如果充电,这种模式自动就取消了。长时间处于闲置的APP,一天运行进行一次网络读写。
两者的目的都是为了减少电量的消耗。达到长时间待机的目的。(赶脚有木有点像诺基亚的情景模式啊)
三. 移除apache的httpClien
假如你的APP使用api 9以上,建议使用httpURLConnection,它因为使用透明压缩传输,响应缓存而更加的高效,电量消耗更少。如果需要继续使用apache的httpClient需要在buid.gradle中申明
android { useLibrary 'org.apache.http.legacy' }
四. BoringSSL
Android 正在抛弃OpenSSL 而使用BoringSSL (什么东东,感觉没怎么用到~)。如果你正在使用Android NDK ,不要链接依赖cryptographic这些库,像libcrypto.so and libssl.so。
五. 获取硬件识别码(Access hardware identifier)
为了更好的数据保护,从这个版本开始,系统移除了直接获得硬件识别码的方法。WIFI 和 Bluetooth 的APIS有部分变,WifiInfo.getMacAddress() 和 BluetoothAdapter.getAddress() 方法返回一个固定的值 02:00:00:00:00:00.
可以通过wifi和蓝牙扫描获取附近设备的标识符,不过需要申请权限ACCESS_FINE_LOCATION和ACCESS_COARSE_LOCATION。使用下面的方法来进行扫描:WifiManager.getScanResults()BluetoothDevice.ACTION_FOUNDBluetoothLeScanner.startScan()
需要注意的是:当进行后台的蓝牙和wifi扫描的时候,这种操作对外部设备是可见的,但是外部的设备看到的mac地址是随机的。
六. 通知栏
移除了Notification.setLatestEventInfo()这个方法
七. AudioManager
不在支持直接通过AudioManager调整声音的大小和静音操作。setStreamSolo()弃用,应该调用 requestAudioFocus()。同样的, setStreamMute() 弃用,应该调用adjustStreamVolume()传递值 ADJUST_MUTE或者 ADJUST_UNMUTE.setStreamSolo()弃用,应该调用 requestAudioFocus()。同样的, setStreamMute() 弃用,应该调用adjustStreamVolume()传递值 ADJUST_MUTE或者 ADJUST_UNMUTE.
八. Text Seletion (文本选择)
恩,这家伙就是一个可以选中文本进行赋值,拷贝,黏贴等操作,不多说,感觉没什么太大用处
九. Brower Bookmarker changes
这个版本移除了全局的书签,移除方法:android.provider.Browser.getAllBookmarks()和android.provider.Browser.saveBookmark() methods 移除权限the READ_HISTORY_BOOKMARKS和 WRITE_HISTORY_BOOKMARKS 。意味着这个版本之后需要内部存储书签了。
十. keystore变化
不在支持DSA格式
十一. wifi 和网络变化
1.只允许APP改变自己创建的wifi配置状态。不能删除或者修改其它人创建的wifi配置信息
2.之前可以强制到wifi网络,移动网络的连接会断开。但是这个版本不再这么做。假如targetSdkVersion 是“21”或者更高, 需要使用多网络APIs (像 openConnection(), bindSocket()和bindProcessToNetwork() 方法去确保网络数据被发送到指定的网络
十二. 摄像头服务改变
不在实行先申请,先服务的策略。会更加优先级来进行选择
十三. RunTime (运行时)
总的来就是修改newInstance()这个类。假如你的APP使用v7 appcompat library or the v7 recyclerview library你必须要更新到最新的版本 确保任何自定义的被XML引用的类能够正确创建。
十四. APK 校验
APK 校验
对APK执行更加严格的校验 ,假如有文件在清单中进行了申明,但是却找不到时,则认为这个APK是损坏的。只要有内容被删除,APK必须重新进行打包
十五. USB 连接
默认只进行充电。其它的操作需要显示的授权。
十六。 android for work change(啥东西,,,没见过)
太长不看~~任性~~
ps:以上内容为翻译加理解。上原文:https://developer.android.com/about/versions/marshmallow/android-6.0-changes.html#behavior-afw