Android(kotlin)JetPack系列学习——1. Lifecycle(含源码)

1. LifeCycle(生命周期管理)简介

lifeCycle主要是用来解耦的,LifeCycle可以帮助开发者创建可感知生命周期的组件。这样,组件便能够在其内部管理自己的生命周期,从而降低模块间的耦合度,并降低内存泄漏发生的可能性。LifeCycle不只对Activity/Fragment有用,在Service和Application中也能大显身手。其作用如下:

  • 使用Lifecycle解耦页面与组件
  • 使用LifecycleService解耦Service与组件
  • 使用ProcessLifecycleOwner监听应用程序周期

如果没有Lifecycle,则需要在onResume(), onStop()等生命周期函数中去写,项目一旦大了,就难以维护。

2. 使用

Step1: 添加依赖

plugins {
    
    
    id 'com.android.application'
    id 'org.jetbrains.kotlin.android'
    id 'kotlin-kapt'
}

android {
    
    
    compileSdk 32

    defaultConfig {
    
    
        applicationId "com.jetpackstudy"
        minSdk 21
        targetSdk 32
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
    
    
        release {
    
    
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
    
    
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    kotlinOptions {
    
    
        jvmTarget = '1.8'
    }
}

dependencies {
    
    

    implementation 'androidx.core:core-ktx:1.7.0'
    implementation 'androidx.appcompat:appcompat:1.3.0'
    implementation 'com.google.android.material:material:1.4.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
    testImplementation 'junit:junit:4.13.2'
    androidTestImplementation 'androidx.test.ext:junit:1.1.3'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'

    // lifecycle监听整个应用程序的生命周期
    implementation 'androidx.lifecycle:lifecycle-process:2.5.1'
    implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.3.1'
    implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1'
    // viewModel的获取
    implementation 'androidx.fragment:fragment-ktx:1.5.2'
    // room
    implementation "androidx.room:room-runtime:2.4.3"
    kapt "androidx.room:room-compiler:2.4.3"
    // navigation
    implementation "androidx.navigation:navigation-fragment-ktx:2.5.2"
    implementation "androidx.navigation:navigation-ui-ktx:2.5.2"
    // paging
    implementation "androidx.paging:paging-runtime:3.1.1"
}

添加里面对应的依赖即可

Step2: 实现DefaultLifecycleObserver接口

package com.jetpackstudy.lifecycle

import android.util.Log
import androidx.lifecycle.DefaultLifecycleObserver
import androidx.lifecycle.LifecycleOwner

/**
 *  author  : ctb
 *  date    : 2022/10/29 22:18
 *  desc    : 监听生命周期
 */

private const val TAG = "MyDefaultLifecycleObser"
class MyDefaultLifecycleObserver: DefaultLifecycleObserver{
    
    
    override fun onCreate(owner: LifecycleOwner) {
    
    
        super.onCreate(owner)
        // 可以在这些地方添加业务逻辑
        Log.d(TAG, "onCreate: ")
    }

    override fun onStart(owner: LifecycleOwner) {
    
    
        super.onStart(owner)
        Log.d(TAG, "onStart: ")
    }

    override fun onResume(owner: LifecycleOwner) {
    
    
        super.onResume(owner)
        Log.d(TAG, "onResume: ")
    }

    override fun onPause(owner: LifecycleOwner) {
    
    
        super.onPause(owner)
        Log.d(TAG, "onPause: ")
    }

    override fun onStop(owner: LifecycleOwner) {
    
    
        super.onStop(owner)
        Log.d(TAG, "onStop: ")
    }

    override fun onDestroy(owner: LifecycleOwner) {
    
    
        super.onDestroy(owner)
        Log.d(TAG, "onDestroy: ")
    }

}

Step3: 在Activity中添加观察者:

package com.jetpackstudy

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import com.jetpackstudy.lifecycle.MyDefaultLifecycleObserver

class MainActivity : AppCompatActivity() {
    
    
    override fun onCreate(savedInstanceState: Bundle?) {
    
    
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        lifecycle.addObserver(MyDefaultLifecycleObserver())		// 仅需添加一行代码即可完成
    }
}

3. 效果如下

运行后的效果如下:
在这里插入图片描述

以下全部代码如下:
JetPackStudyDemo全部代码,欢迎star

猜你喜欢

转载自blog.csdn.net/qq_41915623/article/details/127592606