扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
时光匆匆,时间转瞬即逝, 科技 发展的步伐,远远超出我们普通人的预计,从当初的通信手机到如今的智能手机,每年手机的发展都在快速的变化,从当初还可拆卸的电池,到现如今的一体机。从哪个拍张照片都模糊不清,到现如今的光学变焦。
创新互联-专业网站定制、快速模板网站建设、高性价比沅江网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式沅江网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖沅江地区。费用合理售后完善,10多年实体公司更值得信赖。
手机的发展十分迅速,伴随着的也是系统的快速更新,2007年11月5日,谷歌公司向外界展示了一款名为Android的操作系统。这款系统也伴随着人们,度过了13个年头。它给我们的生活带来了太多的变化
今天小K带大家看看,这十三年来,Android都发布了哪些版本,又经历了哪些变化
Android的发展
2003年10月,大洋彼岸的美国,一个名叫安迪·鲁宾的美国人,带领他的团队打造了Android手机操作系统,安迪·鲁宾本人也被誉为“Android之父”。
2005年这个团队,被全球最大的搜索引擎谷歌公司收购,Android之父安迪·鲁宾成为Google公司工程部副总裁,继续负责Android项目的开发。
2007年11月5日,谷歌公司向外界展示历经多年研发后的Android 阿童木,即Android的测试版本,并发布了Android 阿童木的源代码。
2008年9月,谷歌正式发布Android 1.0
2009年4月30日,谷歌正式推出了Android 1.5手机,该安卓版本被命名为Cupcake,从这里开始,安卓才算真正开始走进大众的视野。该版本开始支持录制和播放视频,并支持上传到谷歌Youtube;支持蓝牙耳机,改善配对性能;最新的采用WebKit技术的浏览器,支持复制/贴上和页面中搜索;GPS性能大大提高;提供屏幕上的虚拟键盘;主屏幕增加音乐播放器和相框widgets;应用程序可以自动随着手机旋转;短信、Gmail、日历,浏览器的用户接口大幅改进,如Gmail可以批量删除邮件;相机启动速度加快,拍摄图片可以直接上传到Picasa;来电照片显示。
同年9月15日、10月26日,安卓先后更新1.6版本、2.1版本,开始支持更多的屏幕分辨率,并先后改善了用户使用界面,出现动态壁纸、支持vpn、可以查看应用耗电、支持相机的闪光灯、数码变焦等
2010年5月20日,这个象征着爱情的节日,谷歌发布了Android 2.2 Froyo,开始支持3g网络共享、Flash、App2sd功能、软件商店、应用API接口的开发。
同年12月7日Android 2.3 Gingerbread发布,增加回收站功能、支持VP8和WebM视频格式、支持前置摄像头、SIP/VOIP和NFC,一键文字选择和复制/粘贴、改进的电源管理系统;新的应用管理方式等。
2011年2月3日 Android 3.0 Honeycomb发布,针对平板做出优化、增强网页浏览功能
同年5月11日 Android 3.1发布,全面支持Google Maps ,将Android手机系统跟平板系统再次合并、支持USB输入设备、支持Google TV.可以支持XBOX 360无线手柄
同年7月13 Android 3.2发布,本次更新开始支持SD卡,支持7英寸平板和高通处理器以及桌面小部件自由缩放功能
同年10月19日 Android 4.0 Ice Cream Sandwich发布,此次更新开始支持截图功能、图片编辑功能,可以加滤镜、加相框、进行360度全景拍摄,新增流量管理工具等
2012年6月28日 Android 4.1 Jelly Bean发布,增强通知栏、搜索优化、桌面插件自动调整大小、加强无障碍操作、语言和输入法扩展等
同年10月30日 Android 4.2 发布,改进锁屏功能、可用两根手指进行旋转和缩放显示、专为盲人用户设计的语音输出和手势模式导航功能等
2013年7月25日 Android 4.3发布
同年11月01日 Android 4.4 KitKat发布,此次更新是谷歌为了整合自家服务,力求防止安卓系统继续碎片化、分散化进行的一次更新。
2014年6月26日 Android 5.0 Lollipop发布,这次更新并未有太多的变化,主要更新了桌面功能
同年Android 5.1发布,支持多张SIM卡
2015年9月30日 Android 6.0 Marshmallow发布,在对软件体验与运行性能上进行了大幅度的优化。延长了手机的续航能力
2016年8月22日 Android 7.0 Nougat 发布,提供新功能以提升性能、生产效率和安全性。进一步优化续航能力
同年Android 7.1发布,本次更新为用户和开发人员引入了各种新功能
2017年8月22日Android 8.0 Oreo发布,本次更新更多的还是支持开发人员进行更新
同年Android 8.1 发布,优化了内存、定位服务等
2018年5月9日Android 9.0 Pie 发布,利用新的人工智能技术,让手机可以为用户提供更多帮助。并且会根据用户习惯进行自我调节
2019年Android 10 发布,提供黑夜模式,优化生物识别技术、优化应用、支持可折叠设备和 5G 网络
而随后的Android 11 预计将在今年11月3号发布
安卓手机历经13年,从最初的只能支持基本的通信和拍照功能,跟随着时代 科技 的变化,增添各种新的 科技 ,让手机成为了我们生活中必不可少的一件电子产品,时至今日我们手上的手机以及能够支持面部指纹支付解锁、更加强大的拍照功能,到可以在手机上游玩各种 游戏 和进行各种 娱乐 ,可以在手机上观看视频等
这些变化从方方面面,改变了我们的生活,让我们在这十几年的时间进入到一个全新的智能时代,也许你感受不到什么变化,也许你觉得自己的生活没有什么改变,那不妨与十几年前时代做个对比!
最后小K 在这里 求关注!求关注!求关注!
首先Android开发主要是有三个层次的技术:
1、第一个层次和传统的嵌入式Linux最接近,主要涉及的是CPU、GPU以及外设的驱动以及使能方面。需要熟悉Linux内核,Android框架定义中驱动的接口规范等等,这部分开源社区的力量最大。
2、第二个层次主要是涉及Android框架中间件部分,如多媒体/3D框架,Java虚拟机等等,这部分Google控制的是最严格的,因为他要控制Android各种feature以及捆绑自己的移动互联网应用,必须规范中间件。这部分所涉及的软件技术也最多,从各种C/C++库,Java虚拟机性 能,用户体验抽象到数据库设计等等很大的内涵。
3、第三个层次就是App开发层次,这个层次主要就是利用Android SDK开发了。很多C/C++出身的觉得是用Java开发,其实Java就是啥都是指针的C++,外带try/catch以及垃圾收集,上手其实是很快的。
4、如果你是个新手的话建议你多掌握些技术知识,不管是自学还是去其他地方学习,教学联盟也许会帮助到你,暂且说到这里。
用户通过系统返回按钮导航回去的一组页面,在开发中被称为返回栈 (back stack)。多返回栈即一堆 "返回栈",对多返回栈的支持是在 Navigation 2.4.0-alpha01 和 Fragment 1.4.0-alpha01 中开始的。本文将为您展开多返回栈的技术详解。
无论您在使用 Android 全新的 手势导航 还是传统的导航栏,用户的 "返回" 操作是 Android 用户体验中关键的一环,把握好返回功能的设计可以使应用更加贴近整个生态系统。
在最简单的应用场景中,系统返回按钮仅仅 finish 您的 Activity。在过去您可能需要覆写 Activity 的 onBackPressed() 方法来自定义返回操作,而在 2021 年您无需再这样操作。我们已经在 OnBackPressedDispatcher 中提供了 针对自定义返回导航的 API。实际上这与 FragmentManager 和 NavController 中 已经 添加的 API 相同。
这意味着当您使用 Fragments 或 Navigation 时,它们会通过 OnBackPressedDispatcher 来确保您调用了它们返回栈的 API,系统的返回按钮会将您推入返回栈的页面逐层返回。
多返回栈不会改变这个基本逻辑。系统的返回按钮仍然是一个单向指令 —— "返回"。这对多返回栈 API 的实现机制有深远影响。
在 surface 层级,对于 多返回栈的支持 貌似很直接,但其实需要额外解释一下 "Fragment 返回栈" 到底是什么。FragmentManager 的返回栈其实包含的不是 Fragment,而是由 Fragment 事务组成的。更准确地说,是由那些调用了 addToBackStack(String name) API 的事务组成的。
这就意味着当您调用 commit() 提交了一个调用过 addToBackStack() 方法的 Fragment 事务时, FragmentManager 会执行所有您在事务中所指定的操作 (比如 替换操作 ),从而将每个 Fragment 转换为预期的状态。然后 FragmentManager 会将该事务作为它返回栈的一部分。
当您调用 popBackStack() 方法时 (无论是直接调用,还是通过系统返回键以 FragmentManager 内部机制调用),Fragment 返回栈的最上层事务会从栈中弹出 -- 比如新添加的 Fragment 会被移除,隐藏的 Fragment 会显示。这会使得 FragmentManager 恢复到最初提交 Fragment 事务之前的状态。
也就是说 popBackStack() 变成了销毁操作: 任何已添加的 Fragment 在事务被弹出的时候都会丢失它的状态。换言之,您会失去视图的状态,任何所保存的实例状态 (Saved Instance State),并且任何绑定到该 Fragment 的 ViewModel 实例都会被清除。这也是该 API 和新的 saveBackStack() 方法之间的主要区别。 saveBackStack() 可以实现弹出事务所实现的返回效果,此外它还可以确保视图状态、已保存的实例状态,以及 ViewModel 实例能够在销毁时被保存。这使得 restoreBackStack() API 后续可以通过已保存的状态重建这些事务和它们的 Fragment,并且高效 "重现" 已保存的全部细节。太神奇了!
而实现这个目的必须要解决大量技术上的问题。
虽然 Fragment 总是会保存 Fragment 的视图状态,但是 Fragment 的 onSaveInstanceState() 方法只有在 Activity 的 onSaveInstanceState() 被调用时才会被调用。为了能够保证调用 saveBackStack() 时 SavedInstanceState 会被保存,我们 还 需要在 Fragment 生命周期切换 的正确时机注入对 onSaveInstanceState() 的调用。我们不能调用得太早 (您的 Fragment 不应该在 STARTED 状态下保存状态),也不能调用得太晚 (您需要在 Fragment 被销毁之前保存状态)。
这样的前提条件就开启了需要 解决 FragmentManager 转换到对应状态的问题,以此来保障有一个地方能够将 Fragment 转换为所需状态,并且处理可重入行为和 Fragment 内部的状态转换。
在 Fragment 的重构工作进行了 6 个月,进行了 35 次修改时,发现 Postponed Fragment 功能已经严重损坏,这一问题使得被推迟的事务处于一个中间状态 —— 既没有被提交也并不是未被提交。之后的 65 个修改和 5 个月的时间里,我们几乎重写了 FragmentManager 管理状态、延迟状态切换和动画的内部代码,具体请参见我们之前的文章《全新的 Fragment: 使用新的状态管理器》。
随着技术问题的逐步解决,包括更加可靠和更易理解的 FragmentManager ,我们新增加了两个 API: saveBackStack() 和 restoreBackStack() 。
如果您不使用这些新增 API,则一切照旧: 单个 FragmentManager 返回栈和之前的功能相同。现有的 addToBackStack() 保持不变 —— 您可以将 name 赋值为 null 或者任意 name 。然而,当您使用多返回栈时, name 的作用就非常重要了: 在您调用 saveBackStack() 和之后的 restoreBackStack() 方法时,它将作为 Fragment 事务的唯一的 key。
举个例子,会更容易理解。比如您已经添加了一个初始的 Fragment 到 Activity,然后提交了两个事务,每个事务中包含一个单独的 replace 操作:
也就是说我们的 FragmentManager 会变成这样:
比如说我们希望将 profile 页换出返回栈,然后切换到通知 Fragment。这就需要调用 saveBackStack() 并且紧跟一个新的事务:
现在我们添加 ProfileFragment 的事务和添加 EditProfileFragment 的事务都保存在 "profile" 关键字下。这些 Fragment 已经完全将状态保存,并且 FragmentManager 会随同事务状态一起保持它们的状态。很重要的一点: 这些 Fragment 的实例并不在内存中或者在 FragmentManager 中 —— 存在的仅仅只有状态 (以及任何以 ViewModel 实例形式存在的非配置状态)。
替换回来非常简单: 我们可以在 "notifications" 事务中同样调用 saveBackStack() 操作,然后调用 restoreBackStack() :
这两个堆栈项高效地交换了位置:
维持一个单独且活跃的返回栈并且将事务在其中交换,这保证了当返回按钮被点击时, FragmentManager 和系统的其他部分可以保持一致的响应。实际上,整个逻辑并未改变,同之前一样,仍然弹出 Fragment 返回栈的最后一个事务。
这些 API 都特意按照最小化设计,尽管它们会产生潜在的影响。这使得开发者可以基于这些接口设计自己的结构,而无需通过任何非常规的方式保存 Fragment 的视图状态、已保存的实例状态、非配置的状态。
当然了,如果您不希望在这些 API 之上构建您的框架,那么可以使用我们所提供的框架进行开发。
Navigation Component 最初 是作为通用运行时组件进行开发的,其中不涉及 View、Fragment、Composable 或者其他屏幕显示相关类型及您可能会在 Activity 中实现的 "目的地界面"。然而,NavHost 接口 的实现中需要考虑这些内容,通过它添加一个或者多个 Navigator 实例时,这些实例 确实 清楚如何与特定类型的目的地进行交互。
这也就意味着与 Fragment 的交互逻辑全部封装在了 navigation-fragment 开发库和它其中的 FragmentNavigator 与 DialogFragmentNavigator 中。类似的,与 Composable 的交互逻辑被封装在完全独立的 navigation-compose 开发库和它的 ComposeNavigator 中。这里的抽象设计意味着如果您希望仅仅通过 Composable 构建您的应用,那么当您使用 Navigation Compose 时无需任何涉及到 Fragment 的依赖。
该级别的分离意味着 Navigation 中有两个层次来实现多返回栈:
仍需特别注意那些 尚未 更新的 Navigator ,它们无法支持保存自身状态。底层的 Navigator API 已经整体重写来支持状态保存 (您需要覆写新增的 navigate() 和 popBackStack() API 的重载方法,而不是覆写之前的版本),即使 Navigator 并未更新, NavController 仍会保存 NavBackStackEntry 的状态 (在 Jetpack 世界中向后兼容是非常重要的)。
如果您仅仅在应用中使用 Navigation,那么 Navigator 这个层面更多的是实现细节,而不是您需要直接与之交互的内容。可以这么说,我们已经完成了将 FragmentNavigator 和 ComposeNavigator 迁移到新的 Navigator API 的工作,使其能够正确地保存和恢复它们的状态,在这个层面上您无需再做任何额外工作。
如果您正在使用 NavigationUI,它是用于连接您的 NavController 到 Material 视图组件的一系列专用助手,您会发现对于菜单项、 BottomNavigationView (现在叫 NavigationRailView ) 和 NavigationView ,多返回栈是 默认启用 的。这就意味着结合 navigation-fragment 和 navigation-ui 使用就可以。
NavigationUI API 是基于 Navigation 的其他公共 API 构建的,确保您可以准确地为自定义组件构建您自己的版本。保证您可以构建所需的自定义组件。启用保存和恢复返回栈的 API 也不例外,在 Navigation XML 中通过 NavOptions 上的新 API,也就是 navOptions Kotlin DSL,以及 popBackStack() 的重载方法可以帮助您指定 pop 操作保存状态或者指定 navigate 操作来恢复之前已保存的状态。
比如,在 Compose 中,任何全局的导航模式 (无论是底部导航栏、导航边栏、抽屉式导航栏或者任何您能想到的形式) 都可以使用我们在与 底部导航栏集成 所介绍的相同的技术,并且结合 saveState 和 restoreState 属性一起调用 navigate() :
对用户来说,最令人沮丧的事情之一便是丢失之前的状态。这也是为什么 Fragment 用一整页来讲解 保存与 Fragment 相关的状态,而且也是我非常乐于更新每个层级来支持多返回栈的原因之一:
如果您希望了解 更多使用该 API 的示例,请参考 NavigationAdvancedSample (它是最新更新的,且不包含任何用于支持多返回栈的 NavigationExtensions 代码)。
对于 Navigation Compose 的示例,请参考 Tivi。
如果您遇到任何问题,请使用官方的问题追踪页面提交关于 Fragment 或者 Navigation 的 bug,我们会尽快处理。
1、开发工具
Android Studio: Google 官方放弃 Eclipse 和 Android Studio 普及。AS 虽然不算新,但是对 Android Studio 这个软件的更新速度快的惊人,有大量的新功能发布。例如支持很多注解代码提示注解、Live code template、支持自动生成 Parcelable 实现等等
2、编程“语言”
Kotlin: 作为 Android 领域的 Swift,绝对让你如沐新风。抛弃沉重的 Java 语法,Kotlin 融入了很多现代编程语言的思想,作为开发者,接受新的语言,了解新语言的发展趋势,更有利于开阔你的思路和加深对语言的理解。在 Android 开发上,使用 Kotlin 并不会让你付出什么代价,为什么不来试试? 使用Kotlin进行Android开发。
React Native: 跨平台一直是程序员的梦想,而且移动应用的跨平台解决方案也很多,因为 Facebook 的参与和力推,让这个解决方案带上了光环。第一个用 React Native 开发的 App 已经在 Google Play 上架 Facebook 广告管理工具,听说 Android 的 SDK 也马上会到来,React Native。
Sky: 与 React Native 类似,使用 Web 开发语言来做移动平台的开发,虽然这个只是一个尝试,但是这是 Google 自身推出的,特别是在 Java 语言的使用上败诉之后,这可能会有一些作为呢
3、开发模式
Dagger 2:依赖注入并不是什么新技术,但是使用在 Android 确实一个新的尝试。Android App 越来越被当成严肃的大型项目来构建,很多在以前大型服务器开发上使用的技术都被应用到了移动开发。Android 开发分模块开发,使用 Dagger 来松耦合模块。特别值得一体的是,Dagger 2 现在由 Google 亲自接管。
MVP:因为 Android 并没有严格的业务和界面区分,项目一复杂,就很容易使代码陷入混乱。现在 Android 开发社区对 MVP 模式讨论越来越热,觉得 MVP 是非常适合 Android APP 开发。MVP for Android: how to organize the presentation layer
RxAndroid: 函数响应式编程(Functional Reactive Programming)也不是新内容,RxAndroid 把 RxJava 带到 Android 环境中。很多时候,编写 Android 程序,你也可以看成是数据的处理和流动,换一种思想编程,曾经看起来很棘手的问题,瞬间就很优雅的解决了:ReactiveX/RxAndroid · GitHub
MVVM :这是因为开始官方支持 DataBinding,把 MVVM 直接带到 Android 中。数据绑定在 Windows WPF 和 Web 已经非常常见,它非常高效的开发效率,让你只关心你的数据和业务。这也对 Android 开发来说,无疑是一个非常重大的影响
插件化:针对大型 Android 项目,很多 App 开始使用插件来分模块构建相对独立的功能。
Hybrid:完全使用 HTML 5 开发 App,目前还不成熟。但是折中方案在很多情况下是非常适合的,典型的就是微信,大部分信息展示都是通过 H5 来完成,同时通过 Hybird 方式,把 Web 和 Native 打通,提供给网页访问本地资源的能力。
4、UI设计
Material Design:已经红遍了大江南北,这方面的讨论实在太多了,而且各种支持库都有了,特别是 Google 官方出了一个支持库
Sketch 3: 这是一个专为设计移动端 UI 的设计工具,作为开发者,不用懂那么复杂的 PS 使用,也可以做非常专业设计
安卓开发需要掌握哪些技术如下:
1、扎实的JAVA基础,熟练掌握面向对象(OOP)思想,熟悉java序列化机制实现Android下IPC的机制。
2、好的开发习惯,一心追求流畅顺滑的UI体验,对代码有洁癖。
3、熟练掌握Android四大组件(Activity,Service与intentService,LocalBroadcastManager的BroadcastReceiver,ContentProvider)。
4、熟练使用集合、IO流及多线程断点上传下载,和线程池的使用。
界面UI:
1、熟练使用Android下常用的布局设计,新版本Material Design布局和设计,熟练自定义控件和一些主流的第三方控件的使用等。
2、熟悉Android中的动画,选择器,样式和主题的使用,能够实现市面上大多数动画效果。
3、熟练并能独立解决市面上各种Android机型屏幕的适配(图片适配,Dimens适配和AutoLayout适配等等)。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流