前言
作为jetpack
的第一篇,我还会附带解释下一些比较模糊的概念。下面来讲解下jetpack
相关知识。
今天涉及知识:
-
jetpack
与AndroidX
-
Lifecycle
用来做什么 -
Lifecycle
使用步骤 - 结合具体例子讲解
Lifecycle
的使用
4.1 添加Lifecycle依赖
4.2 在 Activity 布局中添加自定义控件的引用
4.3 在 Activity 中添加生命周期绑定
4.4 自定义Chronometer代码
一. jetpack 与 AndroidX
jetpack
是一套Android
开发标准与模板,目的是减少冗余,内存泄漏什么的,jetpack
中不少的组件均收录在AndroidX
中,由于Android SDK
更新比较慢,所以产生了AndroidX
项目用于快速更新满足快速开发需求。大致就是这个样子。
二. Lifecycle 用来做什么
Lifecycle
的产生是为了解耦业务逻辑与页面(包括Activity
和Fragment
)生命周期严重绑定的问题。
三. Lifecycle 使用步骤
- 在
app_module
对应的build.gradle
中引入Lifecycle
相关依赖 - 让业务逻辑类实现
DefaultLifecycleObserver
接口,DefaultLifecycleObserver
中拥有
onCreate(@NonNull LifecycleOwner owner)
onStart(@NonNull LifecycleOwner owner)
onResume(@NonNull LifecycleOwner owner)
onPause(@NonNull LifecycleOwner owner)
onStop(@NonNull LifecycleOwner owner)
onDestroy(@NonNull LifecycleOwner owner)
生命周期,我们可以在这里处理与页面生命周期相关的业务逻辑
- 在
Activity
或Fragment
中添加Lifecycle
监听
四. 结合具体例子讲解 Lifecycle 的使用
4.1 添加Lifecycle
依赖
在app_module
对应的build.gradle
中添加Lifecycle
依赖:
dependencies {
// Java 8支持的 DefaultLifecycleObserver
implementation "androidx.lifecycle:lifecycle-common-java8:2.3.1"
//其他代码省略
//......
}
4.2 在 Activity 布局中添加自定义控件的引用
这里我们自定义一个计时器控件MyChronometer
,并将其计时逻辑绑定在MainActiviy
生命周期中,下面给出其在MainActiviy
对应布局activity_main.xml
中引用代码如下:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ui.MainActivity">
<TextView
android:id="@+id/tv_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.08" />
<Button
android:id="@+id/btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="30dp"
android:text="计时"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tv_name" />
<com.ktdemo.function.MyChronometer
android:id="@+id/timeChronometer"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/btn" />
</androidx.constraintlayout.widget.ConstraintLayout>
4.3 在 Activity 中添加生命周期绑定
接着在MainActivity
中给出MyChronometer
绑定生命周期监听操作,代码显示如下:
@RequiresApi(Build.VERSION_CODES.N)
class MainActivity : AppCompatActivity(), View.OnClickListener {
private lateinit var mBingding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
mBingding = ActivityMainBinding.inflate(layoutInflater)
setContentView(mBingding.root)
initData()
setListener()
}
private var initData = {
mBingding.tvName.text = "我是谁"
//绑定生命周期监听
lifecycle.addObserver(mBingding.timeChronometer)
}
private var setListener = {
LogUtil.i("====setListener=====")
mBingding.btn.setOnClickListener(this)
}
override fun onClick(v: View) {
when (v.id) {
R.id.btn -> {
LogUtil.i("====我点击了=====")
}
else -> {
}
}
}
}
效果图如下:
效果图.gif
网友评论