美文网首页
Lifecycle的使用

Lifecycle的使用

作者: 奔跑的佩恩 | 来源:发表于2022-08-02 16:48 被阅读0次

    前言

    作为jetpack的第一篇,我还会附带解释下一些比较模糊的概念。下面来讲解下jetpack相关知识。
    今天涉及知识:

    1. jetpackAndroidX
    2. Lifecycle用来做什么
    3. Lifecycle使用步骤
    4. 结合具体例子讲解Lifecycle的使用
      4.1 添加Lifecycle依赖
      4.2 在 Activity 布局中添加自定义控件的引用
      4.3 在 Activity 中添加生命周期绑定
      4.4 自定义Chronometer代码

    一. jetpack 与 AndroidX

    jetpack是一套Android开发标准与模板,目的是减少冗余,内存泄漏什么的,jetpack中不少的组件均收录在AndroidX中,由于Android SDK 更新比较慢,所以产生了AndroidX项目用于快速更新满足快速开发需求。大致就是这个样子。

    二. Lifecycle 用来做什么

    Lifecycle的产生是为了解耦业务逻辑与页面(包括ActivityFragment)生命周期严重绑定的问题。

    三. 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)
    

    生命周期,我们可以在这里处理与页面生命周期相关的业务逻辑

    • ActivityFragment中添加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
    4.4 自定义Chronometer代码

    相关文章

      网友评论

          本文标题:Lifecycle的使用

          本文链接:https://www.haomeiwen.com/subject/ncmrwrtx.html