JetPack最新库的简单介绍

本文简单了解JetPack最新的改动。官方链接

1.androidx.activity

这个其实没啥可说的,其实就是简化了一部分用法,比如把构造器放到activity上去。参考链接
How AndroidX changes the way we work with Activities and Fragments
A first look at AndroidX Activity Result APIs

2.androidx.appcompat

也没啥可说的,相当于对Android Support Library的一次升级.具体介绍在这里
总是听到有人说AndroidX,到底什么是AndroidX?

3.androidx.camera

主要还是使用Camera需要一大堆繁琐的回调。androidx.camera就是对Camera和Camera2的简化.官方链接
现在预览只需要如下代码(少了一大堆回调是不是简单多了)

    private fun startCamera() {
        val cameraProviderFuture = ProcessCameraProvider.getInstance(this)

        cameraProviderFuture.addListener(Runnable {
            // Used to bind the lifecycle of cameras to the lifecycle owner
            val cameraProvider: ProcessCameraProvider = cameraProviderFuture.get()

            // Preview
            val preview = Preview.Builder()
                .build()
                .also {
                    it.setSurfaceProvider(mViewFinder.surfaceProvider)
                }

            imageCapture = ImageCapture.Builder().build()

            // Select back camera as a default
            val cameraSelector = CameraSelector.DEFAULT_BACK_CAMERA

            try {
                // Unbind use cases before rebinding
                cameraProvider.unbindAll()

                // Bind use cases to camera
                cameraProvider.bindToLifecycle(
                    this, cameraSelector, preview, imageCapture)

            } catch(exc: Exception) {
                Log.e(TAG, "Use case binding failed", exc)
            }
    }

拍照的代码如下

    private fun takePhoto() {
        // Get a stable reference of the modifiable image capture use case
        val imageCapture = imageCapture ?: return

        // Create time-stamped output file to hold the image
        val photoFile = File(
            outputDirectory,
            SimpleDateFormat(FILENAME_FORMAT, Locale.US
            ).format(System.currentTimeMillis()) + ".jpg")

        // Create output options object which contains file + metadata
        val outputOptions = ImageCapture.OutputFileOptions.Builder(photoFile).build()

        // Set up image capture listener, which is triggered after photo has
        // been taken
        imageCapture.takePicture(
            outputOptions, ContextCompat.getMainExecutor(this), object : ImageCapture.OnImageSavedCallback {
                override fun onError(exc: ImageCaptureException) {
                    Log.e(TAG, "Photo capture failed: ${exc.message}", exc)
                }

                override fun onImageSaved(output: ImageCapture.OutputFileResults) {
                    val savedUri = Uri.fromFile(photoFile)
                    val msg = "Photo capture succeeded: $savedUri"
                    Toast.makeText(baseContext, msg, Toast.LENGTH_SHORT).show()
                    Log.d(TAG, msg)
                }
            })
    }

CameraX 是 Jetpack 的新增库。利用该库,可以更轻松地向应用添加相机功能。该库提供了很多兼容性修复程序和解决方法,有助于在众多设备上打造一致的开发者体验。
官方是这么说的,但其实只是对Camera和Camera2的封装。Camera2的兼容性存在一定问题.链接在这里 https://github.com/android-in-china/Compatibility/issues/3
而且最新的也只是 1.1.0-alpha02 ,还没有正式 release。等以后观察吧

4.androidx.compose

demo在这里 https://blog.csdn.net/u012556114/article/details/103285377
compose感觉和flutter有点相似。Compose源码里的注释直接给出说他们参考了很多Flutter的东西。估计最终结局会和rn,flutter一样不冷不热。很大原因是因为android原生已经发展到今天了,尽管版本适配很头疼,但是真要换估计很多人都不乐意。自己学学就好

5.androidx.databinding

这里有一片讲解的文章 androidx.databinding 基本使用、单向绑定、双向绑定、MVVM

6.androidx.fragment

同 androidx.activity,简化了一部分用法

7.androidx.hilt

官方地址
Hilt 是 Android 的依赖项注入库,可减少在项目中执行手动依赖项注入的样板代码。依赖注入这个东西门槛还是挺高的,本人也曾经尝试写过相关blog,但是总感觉不是那么容易理解,要想写出来更困难,所以放弃了。有兴趣的可以去研究

8.androidx.lifecycle

写过。只不过当时引入的不是androidx而是android
Jetpack:Lifecycle
Jetpack:ViewModel
Jetpack:LiveData

9.Material Design

JetPack Material Design 组件简单介绍
这是本人写的,里面有一两个还是可以用到现有项目中的,不过大多没啥用,主要是有更成熟的方案

10.androidx.navigation

使用这个库有一个前提条件,就是整个app只有一个activity多个fragment。2017年,JakeWharton 曾经建议 App 只用一个 Activity,你可以使用 Fragments,只是别用 Fragments 回退栈。(这个建议有争议性)
首先回答一下为什么他不建议用多个activity。因为 Activity 是一个程序入口。你可以将其视为 app 的一个 main 函数。站在用户的立场上,通常你进入 app 的方式可能包括以下几种:

  • launcher 桌面程序(main 函数入口);
  • 来自参数化 main 函数入口的通知栏,并且导航到 app 的指定位置;
  • 如果你做的是一个相机应用,那么需要处理图片请求的 intents;
  • 如果你做的是一个社交产品,那么需要处理 share 请求的 intents;

差不多类似这些场景。但是,如果你真的不用分享和来自应用的 intents 的话,并且唯一的程序入口就是 launcher 桌面,别为每一个页面创建一个新的入口。这样做其实没有意义。为什么没有意义?因为这种场景下,进程死掉后 launcher 能够启动任何你应用中的 Activity 页面
这一点本人感觉无所谓的。更何况大家都熟悉了多activity的方式
第二点就是不用Fragments 回退栈。这个很好理解,回退栈不好管理,而且生命周期会很莫名其妙。
navigation库就是在单activity多fragment的情况下不用回退栈的方案,具体demo在
https://developer.android.com/codelabs/android-navigation#0

11.androidx.paging

我自己写了一篇 android paging 库介绍
我写的时候因为编译器的原因没有用高版本,据说高版本支持RxJava(RxPagedListBuilder)。有兴趣可以去看看,尝试一下

12.androidx.room

Room 持久性库在 SQLite 的基础上提供了一个抽象层,让用户能够在充分利用 SQLite 的强大功能的同时,获享更强健的数据库访问机制。简单来说,加了一层封装,使用起来更方便
Android数据库的使用:room

13.androidx.workmanager

处理后台任务的,参考 使用 WorkManager 处理后台作业 - Kotlin

14.androidx.datastore

DataStore 有两种实现方式:Preferences 和 Proto,从中选择其一即可
。使用上跟SharedPreference很类似,也很简单,Android官方推荐使用

15.androidx.viewpager2

我自己写了一篇
深入了解ViewPager2

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容