欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android面试标准化开发库Jetpack简单介绍

程序员文章站 2022-06-21 20:13:21
Jetpack的构成如图所见,Jetpack的构成分为四大部分:Architecture,Foundation,Behavior,UI今天先来了解Architecture当中的Navigation。Navigation是什么?Navigation是一个可简化Android导航的库和插件。Navigation可以用来管理Fragment的切换,并且可以通过可视化的方式看到App的交互流程。Navigation的优点官方标准处理Fragment的切换默认情况下正确处理Fragme...

Jetpack的构成

Android面试标准化开发库Jetpack简单介绍

如图所见,Jetpack的构成分为四大部分:Architecture,Foundation,Behavior,UI

Architecture主要包括:

  • Date Binding
  • Lifecycles
  • LiveData
  • Navigation
  • Paging
  • Room
  • ViewModel
  • WorkManager

DataBinding

DataBinding解决了视图调用的一致性问题。

通过在布局中和可观察的数据进行绑定,在绑定的被观察的数据内容set之后,通知控件更新数据内容。

 

Lifecycles是什么 ?

Lifecycles主要解决生命周期管理的一致性问题。之前生命周期管理全部依赖手工维持,例如GpsManager需要在每个用到的Activity页面进行激活,解绑和叫停,Activity页面多了很容易引发问题。

Lifecycles通过模板方法和观察者模式,将生命周期管理的复杂操作,全部在LifeCycleOwner的基类中(例如视图控制器Activity的基类)进行封装,省去了开发者手工编写的麻烦。开发者可以直接在子类中调用getLifecycle().addObserver(GpsManager.getInstance())实现对于LIfeCycleOwner生命周期的感知。

 

LiveData是什么?

LiveData遵循唯一可信源分发状态的标准化开发理念,从而使在快速开发过程中 难以追溯,难以排查,不可预期的问题发生的概率降到最小。

唯一可信源是指生命周期独立于视图控制器的数据组件。通常是单例或者ViewModel,ViewModel姑且也算是单例,一种工厂模式实现的伪单例。

 

Navigation是什么?

Navigation是一个可简化Android导航的库和插件。Navigation可以用来管理Fragment的切换,并且可以通过可视化的方式看到App的交互流程。

Navigation的优点

  1. 官方标准处理Fragment的切换
  2. 默认情况下正确处理Fragment的前进和后退
  3. 为过渡和动画提供标准化资源
  4. 可实现和处理深层链接
  5. 可以绑定Toolbar,BottomNavigationView和ActionBar
  6. SafeArgs(Gradle插件)传递数据时候提供类型安全性
  7. ViewModel的支持

 

Paging

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

 

Room

Room持久性库在SQLite上提供了一个抽象层,帮助开发者更友好、流畅的访问SQLite数据库。

 

ViewModel

ViewModel的存在,主要为了解决状态管理页面通信的问题。当视图控制器重建时候,对于轻量的状态,可以通过视图控制器基类的onSaveInstanceState通过序列化的方式完成存储和恢复。但是对于重量级的状态,例如网络请求返回的数据集合,可以通过生命周期比视图控制器长的ViewModel进行存储,从而得以直接从ViewModel恢复,而是不效率较低的序列化的方式。

 

WorkManager

即使应用程序退出或设备重新启动,也可以轻松地调度预期将要运行的可延迟异步任务。

 

Foundation主要包括:

  • AppCompat
  • Android KTX
  • Multidex
  • Test

AppCompat

提供了一系列以AppCompat开头的API,以便兼容低版本的Android开发。

 

Android KTX

Android KTX 是 Google 开源的一款旨在让 Android 上的 Kotlin 代码更简洁的扩展程序, 进而提高开发效率和使用体验。

使用实例:

1、字符串转URI

// Kotlin
val uri = Uri.parse(uriString)

// android KTX
val uri = uriString.toUri()

2、SharedPreferences

// kotlin
sharedPreferences.edit()
    .putBoolean("key", value)
    .apply()

// KTX
sharedPreferences.edit {
    putBoolean("key", value)
}

3、View的preDraw监听

// kotlin
view.viewTreeObserver.addOnPreDrawListener(
    object : ViewTreeObserver.OnPreDrawListener {
        override fun onPreDraw(): Boolean {
            viewTreeObserver.removeOnPreDrawListener(this)
            actionToBeTriggered()
            return true
        }
    })

// KTX
view.doOnPreDraw {
     actionToBeTriggered()
}

Multidex(Android5.0推出)

使用原因:在Android中一个Dex文件最多存储65536个方法,也就是一个short类型的范围。但随着应用方法数量的不断增加,当Dex文件突破65536方法数量时,打包时就会抛出异常,所以引入Multidex。

  • 打包时,把一个应用分成多个dex,例:classes.dex、classes2.dex、classes3.dex…,加载的时候把这些dex都追加到DexPathList对应的数组中,这样就解决了方法数的限制。
  • Andorid 5.0之后,ART虚拟机天然支持MultiDex。
  • Andorid 5.0之前,系统只加载一个主dex,其它的dex采用MultiDex手段来加载。

使用方法:

1、minSdkVersion 为 21 或更高值

android {
    defaultConfig {
        ...
        minSdkVersion 21 
        targetSdkVersion 26
        multiDexEnabled true
    }
    ...
}

2、minSdkVersion 为 20 或更低值

android {
    defaultConfig {
        ...
        minSdkVersion 15 
        targetSdkVersion 26
        multiDexEnabled true
    }
    ...
}

dependencies {
  compile 'com.android.support:multidex:1.0.3'
}

定义Application代码相关(两种方法)

// 继承 MultiDexApplication
public class MyApplication extends MultiDexApplication { ... }


// 或者 在Application中添加 MultiDex.install(this);
public class MyApplication extends Application {
  @Override
  protected void attachBaseContext(Context base) {
     super.attachBaseContext(base);
     MultiDex.install(this);
  }
}

 

Test

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

 

Behavior主要包括:

  • DownloadManager
  • Media&Playback
  • Permissions
  • Notifications
  • Sharing
  • Slices

 

DownloadManager

可处理长时间运行的HTTP下载,并在出现故障或在连接更改和系统重新启动后重试下载。

Media&Playback

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

Permissions

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

Notifications

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

Sharing

提供适合应用操作栏的共享操作。

Slices

创建可在应用外部显示应用数据的灵活界面元素。

Slices是 Google Assistant 的延伸,谷歌希望使用者能过快速到达App里面的某个特点功能,举一例子就是,你对Google Assistant说你要回家,那么以前可能只会出现滴滴,Uber的选项,但是引进Slices之后会显示更加详细的数据列表,比如滴滴item下会出现到家多少距离,多少钱,是否立即打车等等。

 

UI主要包括:

  • Animation&Transitation
  • Auto,TV&Wear
  • Emoji
  • Fragment
  • Layout
  • Palette

Palette

Palette类似于调色板工具,根据传入的bitmap,提取出主体颜色,使得图片和颜色更加搭配,界面更协调。

Palette可以提取的颜色有如下几个:

  1. Vibrant (有活力的)
  2. Vibrant dark(有活力的 暗色)
  3. Vibrant light(有活力的 亮色)
  4. Muted (柔和的)
  5. Muted dark(柔和的 暗色)
  6. Muted light(柔和的 亮色)

创建Palette对象有四个方法,需要传入Bitmap对象,下面头两个是同步方法,后两个是异步方法

  1. generate(Bitmap bitmap)
  2. generate(Bitmap bitmap, int numColors)
  3. generateAsync(Bitmap bitmap, PaletteAsyncListener listener)
  4. generateAsync(Bitmap bitmap, int numColors, final PaletteAsyncListener listener)

得到Palette对象后,可以取到6个颜色对应的Swatch对象

  1. Palette.getVibrantSwatch()
  2. Palette.getDarkVibrantSwatch()
  3. Palette.getLightVibrantSwatch()
  4. Palette.getMutedSwatch()
  5. Palette.getDarkMutedSwatch()
  6. Palette.getLightMutedSwatch()

Swatch对象是Palette的一个内部类,对应有一下几个方法取得颜色值

  1. getPopulation(): 样本中的像素数量
  2. getRgb(): 颜色的RBG值
  3. getHsl(): 颜色的HSL值
  4. getBodyTextColor(): 主体文字的颜色值
  5. getTitleTextColor(): 标题文字的颜色值

 

本文地址:https://blog.csdn.net/nsacer/article/details/108528123