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:从调色板中提取出有用的信息。
结尾:怎么把常识装入大脑?