近期忙完了一个TV的项目,因为不想让自己的涉猎面变窄(其实自问还是有太多不懂的地方),其他不会用(明明就是小白一只),只关注TV开发。故端正态度,系统的捋一下安卓的知识点,并且进行一些进阶的尝试。总结的知识树来进行复习和深入学习。这个是简化版,是根据之前有一张别人总结的但自己不知道出处的图来进行重画的,加了一点自己的总结,以后会继续完善。希望自控力很差的自己可以坚持下去,成为习惯。
总结了几个大佬的相关文章 源在这里,有的自己添加的,如有缺漏,欢迎指正:
https://blog.csdn.net/csdn_aiyang/article/details/85780925#%E4%B8%80%E3%80%815.0%E6%96%B0%E7%89%B9%E6%80%A7
https://blog.csdn.net/csdn_aiyang/article/details/82870955
https://blog.csdn.net/u014800493/article/details/73088091
咱们这个发展史指的当然是从系统角度出发,只聊各版本特性,望做了解:
1.Android首次在Dalvik上使用JIT(Just In Time Compiler),在运行时对dex/odex进行编译优化,将Dalvik Code编译为精简的Native Code,JIT的引入,将Dalvik的运行性能提升了3-6倍
2.缺点是每次运行都需要编译,因为每次都需要编译,所以会造成额外的电量消耗。
https://blog.csdn.net/ddna/article/details/5624408
Android平台现在支持应用主动要求安装在外部存储设备(如SD卡),以取代将其安装在设备的内部存储区。
1.Android带来了全新的运行环境ART(Android Run Time)和全新的编译策略AOT(Ahead Of Time)
2.AOT是静态编译,在安装时,会启动dex2oat过程,将dex文件与编译成ELF文件,每次运行是不需要重新编译。
3.需要注意的是,彼时 ART 是和 Dalvik 共存的,用户可以在两者之间进行选择
4.我自己加的:目前大部分厂商定制机顶盒都是基于4.4版本的,因为稳定性(2019.8)预测其他安卓智能硬件也是这个版本。小米天猫等盒子为6.0
https://developer.android.com/about/versions/android-4.4.html
1.全面替换为ART运行环境,编译策略也改为AOT
2.缺点:首次安装的时间会变长,会额外增加文件大小,一个100M的app,预编译后可能达到200M
3.自己加的:webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);
webSettings.setUseWideViewPort(true);
webSettings.setLoadWithOverviewMode(true);
都无效了,如需让webview内容自适应屏幕,请webView.setInitialScale(int scale);进行缩放 scale是获取当前屏幕的宽或高与规定宽高的比值
https://developer.android.com/about/versions/android-5.0-changes.html
https://developer.android.com/about/versions/marshmallow/android-6.0-changes.html
引入运行时权限,要确定应用是否已被授予权限,调用新增的 checkSelfPermission() 方法。要请求权限,调用新增的 requestPermissions() 方法。
重点注意:动态的权限申请,6.0以下的版本可以直接申请权限直接使用了,以上的版本需要一些敏感权限时需要动态申请
1.运行环境仍是ART,但是编译策略改为AOT和JIT混合编译
2.在首次安装时,不会进行预编译,直接运行,使用运行时编译,在手机处于空闲或者充电状态的时候,再进行预编译。
3.优点:集合了AOT和JIT的优点,使得安装速度加快,运行速度/存储空间和耗电量等指标都得到了优化
https://developer.android.com/about/versions/nougat/android-7.0-changes.html
分屏多任务
Doze 模式
重点注意: 7.0对于SDCard的文件URI的访问做了限制,获取文件uri的方式也变了,开发时需要注意。
传递软件包网域外的 file:// URI 可能给接收器留下无法访问的路径。因此,尝试传递 file:// URI 会触发 FileUriExposedException。分享私有文件内容的推荐方法是使用 FileProvider。
解决办法:
https://blog.csdn.net/lmj623565791/article/details/72859156
https://developer.android.com/about/versions/oreo/android-8.0-changes
1.针对 8.0 的应用需要在 AndroidManifest.xml 中声明 REQUEST_INSTALL_PACKAGES 权限,否则将无法进行应用内升级。
2.针对 8.0 的应用,创建通知前需要创建渠道,创建通知时需要传入 channelId,否则通知将不会显示
3.如果针对 Android 8.0 的应用尝试在不允许其创建后台服务的情况下使用 startService() 函数,则该函数将引发一个 IllegalStateException。我们目前只能简单 try-catch startService()
重点注意:
8.0限制了后台服务这些,启动后台服务需要设置通知栏,使服务变成前台服务。
对于安装位置来源的应用做了更严格的限制,在app更新安装时需要做些处理。
https://developer.android.com/about/versions/pie/android-9.0-changes-all
刘海设计
Material Design功能更新
权限收紧
重点注意:Android 9.0强制使用https,会阻塞http请求,如果app使用的第三方sdk有http,将全部被阻塞。