Android 开发汇合JetPack

一:前提
自从Google IO 17开始,官网开始治理这个凌乱的Android 开发环境,推出 Architecture Component,包含了大家始终期待的O(R)M库 Room,和生命周期管理工具ViewModel/LiveData。
Google IO 18 更是加大力度,将Support lib改名Android X从新开始,并且将所有Google 认为是正确的Practice 集中在一起,帮忙开发者来简略,高效地进行Android开发。而这所有的货色当初,统称 JetPack。
二:JetPack是什么
JetPack是Google推出的一套系列组件集
JetPack的呈现以及Google 标准化开发模式的确定,代表了Android 原生开发的将来方向,意味着Android 倒退曾经逐渐成熟

三:Jetpact四大模块之根底(Foundation)
提供了最根底的底层性能,如向后兼容性,测试,开发语言Kolin反对等

1.Kotlin 语言是Android官网开发语言 ,Kotlin 是一种在 Java 虚拟机上运行的动态类型编程语言,被称之为 Android 世界的Swift,由 JetBrains 设计开发并开源。
2.AppCompat
依赖:

implementation 'androidx.appcompat:appcompat:1.2.0'


集成一些Android的根底的控件
package androidx.appcompat.app(AppCompatActivity)
androidx.appcompat.content.res
androidx.appcompat.graphics.drawable
androidx.appcompat.view(ContextThemeWrapper)
androidx.appcompat.widget
3.Benchmark测试(没用过)
翻译成中文就是基准、用基准问题测试的意思,Jetpack基准库能够从AS中疾速对基于Kotlin或Java的代码进行基准化剖析,该库会解决CPU预热,掂量代码性能,并输入基准化剖析后果到AS控制台,能够实现性能的测试与代码性能剖析。目前很多我的项目都引入了Benchmark,用来作为评估程序性能的伎俩,比方跑分。

dependencies {        androidTestImplementation "androidx.benchmark:benchmark-junit4:1.0.0-alpha04"    }

4.Multidex(dex分包)
Android 利用 (APK) 文件蕴含 Dalvik Executable (DEX) 文件模式的可执行字节码文件,其中蕴含用来运行您的利用的已编译代码。Dalvik Executable 标准将可在单个 DEX 文件内可援用的办法总数限度在 65,536,其中包含 Android 框架办法、库办法以及您本人代码中的办法。在计算机科学畛域内,术语千(简称 K)示意 1024(或 2^10)。因为 65,536 等于 64 X 1024,因而这一限度也称为“64K 援用限度”
简略应用

// 1. Gralde 配置android {    defaultConfig {        ...        minSdkVersion 15         targetSdkVersion 29        multiDexEnabled true    }    ...}dependencies {     implementation 'androidx.multidex:multidex:2.0.1'}// 2. 清单配置<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"    package="com.example.myapp">    <application            android:name="com.xxx.MyApplication" >        ...    </application></manifest>// 3. Application初始化public class MyApplication extends SomeOtherApplication {  @Override  protected void attachBaseContext(Context base) {     super.attachBaseContext(base);     MultiDex.install(this);  }}

5.Security(没用过)
Jetpack Security (JetSec)加密库为 Files 和 SharedPreferences 对象的加密操作提供了形象反对。该库应用了平安且使用宽泛的密码学原语 (cryptographic primitives),强化了AndroidKeyStore的应用。应用 EncryptedFile 和 EncryptedSharedPreferences 能够让您在本地爱护可能蕴含敏感数据、API 密钥、OAuth 令牌和其余类型机密信息的文件
6.Android JUnit单元测试(临时没用过)

  testImplementation 'junit:junit:4.13'    androidTestImplementation 'androidx.test:runner:1.3.0'    androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'

四:Jetpact四大模块之架构(Architecture)

  • Data Binding(数据绑定):属于反对库可应用申明式将布局中的界面组件绑定到利用中的数据源
  • Lifecycles:治理 Activity 和 Fragment 生命周期
  • LiveData:是一个可察看的数据持有者类。与惯例observable不同,LiveData是有生命周期感知的。
  • Navigation:解决利用内导航所需的所有
  • Paging:一次加载 or 按需加载 & 显示小块数据
  • Room:帮忙开发者更敌对、晦涩的拜访SQLite数据库。
  • ViewModel:以生命周期感知的形式存储和治理与UI相干的数据。
  • WorkManager:调度预期将要运行的可提早异步工作。(即使应用程序退出 or重启)
    Google 官网举荐的利用架构

    1.Data Binding(数据绑定)(待钻研)

    第一步:咱们要在build.gradle中申明应用DataBinding
android {    dataBinding {        enabled = true    }}

如果应用的是Kotlin的话还须要增加上面代码:

apply plugin: 'kotlin-kapt'kapt {    generateStubs = true}

第二步:Layout文件改写
其实也很简略,就是在原有的 Layout 文件外再套上一层 <layout></layout> 标签

<?xml version="1.0" encoding="utf-8"?><layout xmlns:android="http://schemas.android.com/apk/res/android">    <LinearLayout        android:layout_width="match_parent"        android:layout_height="match_parent"        android:orientation="vertical">        <EditText            android:id="@+id/userName"            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:layout_margin="10dp"            android:hint="请输出用户名"            android:textSize="14sp" />        <Button            android:id="@+id/submit"            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:layout_margin="30dp"            android:text="提交" />        <TextView            android:id="@+id/result"            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:layout_margin="10dp"            android:textSize="14sp" />    </LinearLayout></layout>

第三步:Activity应用

ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);binding.result.setText("hello, world");

这是一个简略的应用,具体应用待钻研
2.Lifecycles Activity申明周期的类
生命周期感知组件执行操作以响应另一个组件(例如Activity和Fragment)的生命周期状态的更改。这些组件可帮忙您生成更易于组织且通常更轻量级的代码,这些代码更易于保护。
3.LiveData(待钻研)
LiveData采纳了观察者模式设计,其中LiveData是被观察者,当数据发生变化时会告诉观察者进行数据更新。通过这点,能够确保数据和界面的实时性。
4.Navigation
用于在 Android 利用中的“指标”之间导航,该框架提供统一的 API,无论指标是作为 Fragment、Activity 还是其余组件实现。
5.Paging
paging会主动申请数据,这也就是分页申请的成果.paging的目标就是实现分页加载,之前咱们都是本人实现分页,这次是Google爸爸为咱们实现。不得不说,jetpack真香!
6.Room(之前有写过一期)
请查看:https://segmentfault.com/a/11...
Room长久库提供了一个SQLite形象层,让你拜访数据库更加稳如狗,提醒数据库性能。
7.ViewModel

ViewModel的生命周期会比创立它的Activity、Fragment的生命周期都要长。即ViewModel中的数据会始终存活在Activity/Fragment中
View Model的应用
第一步:增加依赖:

dependencies {    implementation "androidx.lifecycle:lifecycle-viewmodel:2.2.0"}

第二步:写一个继承自ViewModel的类
后面提到,ViewModel最重要的作用是将视图与数据拆散,并独立于Activity的重建,为了验证这一点。咱们在ViewModel中创立一个计时器Timer,每隔1s,告诉接口告诉它的调用者。代码如下

public class TimerViewModel extends ViewModel {    private Timer timer;    private  int currentSecond;    @Override    protected void onCleared() {        super.onCleared();        //清理资源        timer.cancel();    }    //开始计时    public  void startTiming(){        if(timer == null){            currentSecond = 0;            timer = new Timer();            TimerTask timerTask = new TimerTask() {                @Override                public void run() {                    currentSecond++;                    if(onTimeChangeListener != null){                        onTimeChangeListener.onTimeChanged(currentSecond);                    }                }            };            timer.schedule(timerTask,1000,1000);        }    }    private  OnTimeChangeListener onTimeChangeListener;    public void setOnTimeChangeListener(OnTimeChangeListener onTimeChangeListener) {        this.onTimeChangeListener = onTimeChangeListener;    }    public  interface  OnTimeChangeListener{        void onTimeChanged(int second);    }}

第三步:编写TimerActivity

public class TimerActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_timer);        iniComponent();    }    private void iniComponent() {        final TextView textView = findViewById(R.id.textview);        TimerViewModel timerViewModel =  new ViewModelProvider(this).get(TimerViewModel.class);//实例化ViewModel        timerViewModel.setOnTimeChangeListener(new TimerViewModel.OnTimeChangeListener() {            @Override            public void onTimeChanged(final int second) {                //更新UI                runOnUiThread(new Runnable() {                    @Override                    public void run() {                        textView.setText("TIME:"+second);                    }                });            }        });        timerViewModel.startTiming();    }}

8.WorkManager(单讲一期)
WorkManager 负责用来治理后台任务,它和一个异步工作,还有一个第三方的库(jobqueue)相似WorkManager
五:Jetpact四大模块之行为(Behavior)
帮忙利用与规范的 Android 服务(如告诉、权限、分享和 Google 助理)相集成。蕴含组件库:

  • 相机 - CameraX:简化相机利用的开发工作,可向后兼容至 Android 5.0(API 级别 21)
  • 下载 - DownloadManager:可解决长时间运行的HTTP下载 & 超时重连
  • 多媒体 - Media & playback:用于媒体播放 & 路由的向后兼容 API。
  • 告诉 - Notifications:提供向后兼容的告诉 API,反对 Wear 和 Auto。
  • 权限 - Permissions:用于检查和申请利用权限的兼容性 API。
  • 偏好设置 - Preferences:提供了可能扭转利用的性能和行为能力。
  • 共享 - Sharing:提供适宜利用操作栏的共享操作。
  • 切片 - Slices:创立可在利用内部显示利用数据的灵便界面元素。
    1.Camerax
    在 Android 利用中要实现 Camera 性能还是比拟艰难的,为了保障在各品牌手机设施上的兼容性、响应速度等体验细节,Camera 利用的开发者往往须要花很大的工夫和精力进行测试,甚至须要手动在数百种不同设施上进行测试。CameraX 正是为解决这个痛点而诞生的
    2.DownloadManager
    DownloadManger是android 2.3(API 9)开始提供的零碎服务,用于解决长时间的下载操作。利用场景是客户端申请一个URL地址去下载一个指标文件。DownloadManger能够构建一个后盾下载服务,在产生故障或连贯更改、重新启动零碎等状况后,解决HTTP连贯并重试下载
    3.Slices
    Slice其实是一个UI展现模块,它能够在搜寻APP、语音助手、关键字辨认等动作中动静地显示你的APP局部模块的内容,通过它,能够丰盛地显示你的APP当中的内容

六:Jetpact四大模块之界面(UI)

  • 动画 - Animation & Transitions:提供各类内置动画,也能够自定义动画成果。
  • 表情 - Emoji:使用户在未更新零碎版本的状况下也能够应用表情符号。
  • 布局 - Layout:xml书写的界面布局或者应用Compose实现的界面。
  • 调试板 - Palette:从调色板中提取出有用的信息。

结尾:怎么把常识装入大脑?