Kotlin可能带来的一个深坑,终局之战

简介: Kotlin可能带来的一个深坑,终局之战

(一)简介

Handler机制是一套Android消息传递机制。在Android开发多线程的应用场景中,将工作线程中需更新UI的操作信息 传递到 UI主线程,从而实现 工作线程对UI的更新处理,最终实现异步消息的处理。

在Android开发中,为了UI操作是线程安全的,规定了只允许主线程更新Activity里的UI组件。但在实际开发中,存在多个线程并发操作UI组件的情况,导致UI操作线程不安全。故采用Handler消息传递机制,是工作线程需更新UI时,通过Handler通知主线程,从而在主线程中更新UI操作

JetPack里的组件

上图就是JetPack中包含的组件列表,每个组件都是相对独立的,可以被单独使用和构建。其中像被介绍的最多,也是最常被使用的LiveData, ViewModel, Room, Navigation, WorkManager之类的都发布了正式版,而CameraX, Compose之类的还处在Alpha版本,未正式发布,官方并不建议在生产环境中使用。

然后说下,JetPack所有的组件都是基于AndroidX构建的,如果想在项目中使用JetPack需要先将项目中对Support Lib的依赖全部换成AndroidX

Android目前已经发展了11年,可以说是比较成熟的技术了,一开始时框架很少,也没有什么规范,所有的代码都是要自己写,比如网络请求,数据库请求,数据解析等等。后来出现了一些框架来帮助开发者快速进行开发,比如XUtils、Volley、OKHttp、EventBus等,随着框架越来越多,一个应用可以有多种技术选型,直接导致应用开发越来越不规范,导致做出来的应用质量参差不齐,这显然不是谷歌想看到的。谷歌随后推出了MVP和MVVM相关的官方例子,效果很一般,而且覆盖面只是在架构上,Goole I/O 2018大会上推出的Android Jetpack有望解决以上的问题。

三、Android Jetpack简介

Jetpack并不是一个框架或者组件,它是一套库、工具和指南的集合,可帮助开发者更轻松地编写优质应用。这些组件可帮助开发者遵循最佳做法、摆脱编写样板代码的工作并简化复杂任务,以便将精力集中放在所需的代码上。

Android Jetpack中的很多组件并不都是新开发的,而是很早就有了,比如在Goole I/O 2017大会时推出了 Android Architecture Component(AAC),它包括了LifeCycle、LiveData、ViewModel、Room。在Goole I/O 2018大会上,

用AndroidX替代了Android Support Library,并在Android Architecture Component的基础上发布了Android Jetpack,AndroidX也是属于Android Jetpack。

Jetpack主要特性有以下三点:

1.加速开发

组件可单独使用,也可以协同工作,当使用kotlin语言特性时,可以提高效率。

2.消除样板代码

Android Jetpack可管理繁琐的Activity(如后台任务、导航和生命周期管理)。

3.构建高质量的强大应用

Android Jetpack组件围绕现代化设计实践构建而成,具有向后兼容性,可以减少崩溃和内存泄漏。

四、Android Jetpack分类

下图是Jetpack的分类。

谷歌仍旧不断的完善Android Jetpack,截至到2019年8月已经有很多新加的组件并没有显示在上图中,比如CameraX等。Android Jetpack分类有4种,分别是Architecture、Foundationy、Behavior、UI,下面分别介绍下。

1. Architecture(架构组件)

Architecture指的是架构组件,帮助开发者设计稳健、可测试且易维护的应用。架构组件可以说是对应用开发帮助最大的组件,本系列也是围绕着架构组件进行讲解。

DataBinding:以声明方式将可观察数据绑定到界面元素,通常和ViewModel配合使用。

Lifecycle:用于管理Activity和Fragment的生命周期,可帮助开发者生成更易于维护的轻量级代码。

LiveData: 在底层数据库更改时通知视图。它是一个可观察的数据持有者,与常规observable不同,LiveData是生命周期感知的。

Navigation:处理应用内导航。

Paging:可以帮助开发者一次加载和显示小块数据,按需加载部分数据可减少网络带宽和系统资源的使用。

Room:友好、流畅的访问SQLite数据库。它在SQLite的基础上提供了一个抽象层,允许更强大的数据库访问。

ViewModel: 以生命周期的方式管理界面相关的数据,通常和DataBinding配合使用,为开发者实现MVVM架构提供了强有力的支持。

WorkManager: 管理Android的后台的作业,即使应用程序退出或设备重新启动也可以运行可延迟的异步任务。

官方推荐的Android应用架构如下图所示。

这些架构组件既可以配合使用,也可以单独使用,这里建议还是尽量按照官方推荐的来。

2. Foundationy(基础组件)

基础组件提供横向功能,例如向后兼容性、测试、安全、Kotlin 语言支持,并包括多个多个平台开发的组件。

Android KTX:优化了供Kotlin使用的Jetpack和Android平台API。帮助开发者以更简洁、更愉悦、更惯用的方式使用Kotlin进行Android开发。

AppCompat:帮助较低版本的Android系统进行兼容。

Auto: 开发Android Auto应用的组件,提供了适用于所有车辆的标准化界面和用户交互。

检测:从AndroidStudio中快速检测基于Kotlin或Java的代码。

多Dex处理:为具有多个Dex文件应用提供支持。

安全:安全的读写加密文件和共享偏好设置。

测试:用于单元和运行时界面测试的Android 测试框架。

TV: 构建可让用户在大屏幕上体验沉浸式内容的应用。

Wear OS:开发Wear应用的组件。

3. Behavior(行为组件)

行为组件可帮助开发者的应用与标准Android服务(如通知、权限、分享)相集成。

CameraX:帮助开发简化相机应用的开发工作。它提供一致且易于使用的界面,适用于大多数Android。 设备,并可向后兼容至Android 5.0(API 21)。

DownloadManager:处理长时间运行的HTTP下载的系统服务。

媒体和播放:用于媒体播放和路由(包括Google Cast)的向后兼容API。

通知:提供向后兼容的通知API,支持Wear和Auto。

权限:用于检查和请求应用权限的兼容性API。

设置:创建交互式设置,建议使用AndroidX Preference Library库将用户可配置设置集成到应用中。

分享操作:可以更轻松地实现友好的用户分享操作。

切片:切片是一种UI模板,创建可在应用外部显示应用数据的灵活界面元素。

4. UI(界面组件)

Animation and Transition:该框架包含用于常见效果的内置动画,并允许开发者创建自定义动画和生命周期回调。

Emoji Compatibility:即便用户没有更新Android系统也可以获取最新的表情符号。

Fragment:组件化界面的基本单位。

布局:用XML中声明UI元素或者在代码中实例化UI元素。

调色板:从调色板中提取出有用的信息。

五、在应用中引入Jetpack相关组件

在项目build.gradle中添加google() 库,如下所示。

  allprojects {
        repositories {
            google()
            jcenter()
        }
    }

如果想引入Room,可以在模块build.gradle中这么写:

    implementation   "android.arch.persistence.room:runtime:1.1.1"
    annotationProcessor   "android.arch.persistence.room:compiler:1.1.1 "
    androidTestImplementation  "android.arch.persistence.room:testing:1.1.1"

总结

这篇文章内部不多,旨在让大家了解Android Jetpack是什么,包括什么,如何引用,从下一篇开始,就开始学习Android Jetpack的架构组件。

最后对于程序员来说,要学习的知识内容、技术有太多太多,要想不被环境淘汰就只有不断提升自己,从来都是我们去适应环境,而不是环境来适应我们!

相关文章
|
4月前
|
开发者
从代码中汲取智慧——我的编程之旅与技术感悟
【9月更文挑战第24天】在数字世界的迷宫中,代码是指引我们前行的罗盘。它不仅仅是冷冰冰的指令集合,更是一扇窗,透过它,我们可以看到逻辑的严谨、问题的解决以及创新的火花。本文将分享我在编程旅途中的一些深刻体会,从最初的困惑与挫败,到逐渐掌握编程语言的乐趣,再到通过代码解决问题的成就感。我将探讨如何通过编程提升思维能力,以及编程对个人成长和职业发展的重要性。无论你是编程新手还是资深开发者,这段旅程都将启发你去思考和探索技术的深层次意义。
38 1
|
5月前
|
并行计算 算法 数据处理
编程之道:从代码中领悟技术与生活的哲理
【8月更文挑战第28天】在数字世界的迷宫中,每一行代码都像是宇宙中的一个星系,既独立又相互联系。本文将通过一段简单的Python代码示例,探讨如何从编程实践中汲取生活智慧。我们将看到,代码不仅仅是冷冰冰的指令序列,它也能反映出人类思维的深度和广度。正如甘地所言:“你必须成为你希望在世界上看到的改变。”在编程的世界里,我们同样可以创造并见证这种改变。
56 3
|
3月前
|
程序员
代码与生活:技术感悟中的哲理
【10月更文挑战第20天】 在编程的世界里,我们不仅仅是在编写代码,更是在塑造一种生活方式。本文将探讨如何将编程思维应用到日常生活中,以及这种思维方式如何帮助我们更好地理解世界和自己。通过具体的例子和深入的分析,我们将看到,编程不仅仅是一种技能,更是一种生活哲学。
43 0
|
4月前
|
前端开发 JavaScript 算法
编程之旅:从迷茫到精通的心路历程
【9月更文挑战第20天】在编程的世界里,每个人都是一名旅者。起初,面对复杂的代码和逻辑,我们如同初入森林的探险者,既充满好奇又感到迷茫。然而,正如古人云:“千里之行,始于足下。”通过不断学习和实践,我们逐渐找到了属于自己的路径。本文将分享一位程序员的成长故事,从大学毕业时的迷茫,到大胆尝试新领域,再到不断学习和提升,最终找到人生方向的过程。让我们一起跟随他的脚步,探索编程之旅的奥秘与乐趣。
|
4月前
|
程序员
从代码中感悟生活的哲理
【9月更文挑战第12天】本文以编程为引子,探讨了技术背后的哲学思考。文章通过深入浅出的方式,结合生活中的小故事和简单的代码示例,引导读者理解在看似冰冷的代码背后所蕴含的热情与智慧。文章旨在启发读者,无论面对何种挑战,都应保持初心,勇于探索,不断学习,最终找到属于自己的人生方向。
|
5月前
|
人工智能 数据挖掘 数据库
探索代码之美:我的编程之旅与技术感悟
【8月更文挑战第31天】在数字世界的海洋中,编程是那艘能带我们探索未知的船。我通过编程找到了自己的方向,从一个迷茫的大学毕业生成长为一名不断学习和提升的技术人员。就像甘地所说,“你必须成为你希望在世界上看到的改变。”我在代码中看到了创造和改变的力量,这篇文章将分享我的技术旅程和对编程之美的理解。
|
5月前
|
Java
在Java编程的江湖中,有一本传说中的“武林秘籍”,它不是刀光剑影的武学心法,而是能够让代码变得灵动、高效的秘密武器——多态。
在Java编程的江湖中,有一本传说中的“武林秘籍”,它不是刀光剑影的武学心法,而是能够让代码变得灵动、高效的秘密武器——多态。
44 1
|
5月前
|
算法 程序员
代码之舞:编程艺术与技术感悟
在数字世界的广阔舞台上,编程不仅是逻辑的堆砌与算法的运行,它更像是一场精心编排的舞蹈。本文将通过个人的技术旅程,探讨编程之美,揭示如何将枯燥的代码转变为优雅的解决方案,并分享在技术探索中收获的深刻感悟。
43 2
|
5月前
|
机器学习/深度学习 设计模式 开发框架
编程之舞:技术感悟与实践
在数字世界的舞台上,编程不仅是技术的展示,更是一种艺术的体现。本文将通过个人的技术旅程,探讨如何将编程从一项技能转变为一种创造性的实践。我们将一起探索代码背后的哲学,学习如何在解决复杂问题时保持创新和灵活性,并讨论持续学习的重要性以及它如何塑造我们的技术之路。
代码之舞:我的编程之旅与技术感悟
在数字世界的无限舞台上,每一行代码都像是精心编排的舞步,共同谱写着技术的交响曲。本文将带领读者穿梭于编程的世界,探索那些隐藏在逻辑严谨与创新自由之间的奥秘。从最初的迷茫到渐渐的熟练,每一次的挑战都是自我提升的机会。文章旨在分享个人的技术成长历程,展现编程之美,并鼓励更多的技术爱好者踏上属于自己的代码之旅。我们将一同见证,如何在细节中追求完美,在复杂中寻找简单,最终在技术的海洋里找到自己的航道。