前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JetPack最新库的简单介绍

JetPack最新库的简单介绍

作者头像
提莫队长
发布2021-07-19 16:12:06
8610
发布2021-07-19 16:12:06
举报
文章被收录于专栏:刘晓杰

本文简单了解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的简化.

现在预览只需要如下代码(少了一大堆回调是不是简单多了)

代码语言:javascript
复制
    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)
            }
    }

拍照的代码如下

代码语言:javascript
复制
    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的情况下不用回退栈的方案

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.androidx.activity
  • 2.androidx.appcompat
  • 3.androidx.camera
  • 4.androidx.compose
  • 5.androidx.databinding
  • 6.androidx.fragment
  • 7.androidx.hilt
  • 8.androidx.lifecycle
  • 9.Material Design
  • 10.androidx.navigation
  • 11.androidx.paging
  • 12.androidx.room
  • 13.androidx.workmanager
  • 14.androidx.datastore
  • 15.androidx.viewpager2
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档