1.LifeCycle

MyJetpackStudy: jetpack学习 (gitee.com)

Lifecycle是什么?

1
2
3
4
lifecycle 是属于Android Jetpack(官方开发工具包)—— Architecture(架构组件)中的一员。

官方介绍:构建生命周期感知型组件,这些组件可以根据 Activity 或 Fragment 的当前生命周期状态调整行为。
白话:lifecycle可以和Activity或Fragment生命周期绑定,方便我们做一些跟生命周期相关的业务逻辑。

Lifecycle的特点

1
2
3
4
5
6
7
1.生命周期感知:Lifecycle 可以感知应用组件的生命周期状态,包括活动状态、暂停状态、停止状态等。
2.简化生命周期回调:使用 Lifecycle,可以避免在应用组件中手动实现繁琐的生命周期回调。
3.灵活性:Lifecycle 可以与其他 Jetpack 组件(如 ViewModel、LiveData 等)结合使用,提供更灵活的生命周期管理方案。
4.生命周期安全性:Lifecycle 能够确保在正确的生命周期状态下执行相应的操作,避免了可能导致崩溃或内存泄漏的问题。

通过 Lifecycle,开发者可以更好地管理和控制应用组件的生命周期,执行与生命周期相关的操作,如初始化资源、释放资源、注册/注销观
察者等。它可以帮助开发者编写更健壮、可维护的代码,并提供更好的用户体验。

Lifecycle使用

1.先看看可以引用哪些?

1
2
//androidx
implementation 'androidx.appcompat:appcompat:1.3.0'
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
   //非androidx
dependencies {
def lifecycle_version = "1.1.1"
// 包含ViewModel和LiveData
implementation "android.arch.lifecycle:extensions:$lifecycle_version"
// 仅仅包含ViewModel
implementation "android.arch.lifecycle:viewmodel:$lifecycle_version" // For Kotlin use viewmodel-ktx
// 仅仅包含LiveData
implementation "android.arch.lifecycle:livedata:$lifecycle_version"
// 仅仅包含Lifecycles
implementation "android.arch.lifecycle:runtime:$lifecycle_version"
annotationProcessor "android.arch.lifecycle:compiler:$lifecycle_version" // For Kotlin use kapt instead of annotationProcessor
// 如果用Java8, 用于替代compiler
implementation "android.arch.lifecycle:common-java8:$lifecycle_version"
// 可选,ReactiveStreams对LiveData的支持
implementation "android.arch.lifecycle:reactivestreams:$lifecycle_version"
// 可选,LiveData的测试
testImplementation "android.arch.core:core-testing:$lifecycle_version"
}

除了Activity和Fragment外,还可以绑定Service和Application的生命周期。只要引入支持相关的可选库即可;官方提到最多的是Activity和Fragment,是因为平时主要用于这两个组件;其实只要有生命周期的组件都可以跟它绑定。而在Android中大多数的组件都是有生命周期的。

2.简单使用案例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
package com.example.lifecycledemo1;

import android.arch.lifecycle.Lifecycle;
import android.arch.lifecycle.LifecycleObserver;
import android.arch.lifecycle.OnLifecycleEvent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;

public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getLifecycle().addObserver(new MyObserver());//1
}
public class MyObserver implements LifecycleObserver{
@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
void onResume(){
Log.d(TAG, "Lifecycle call onResume");
}
@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
void onPause(){
Log.d(TAG, "Lifecycle call onPause");
}
}
@Override
protected void onResume() {
super.onResume();
Log.d(TAG, "onResume");
}
@Override
protected void onPause() {
super.onPause();
Log.d(TAG, "onPause");
}
}

工具类封装:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
//使用:被观察者继承BaseActivity或者添加getLifecycle().addObserver(new BaseLifeCycle());即可
public abstract class BaseActivity <T extends BaseLifeCycle> extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getLifecycle().addObserver(new BaseLifeCycle());
}
}

//观察者类
public class BaseLifeCycle implements LifecycleObserver{
private String TAG="tyl";
@OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
void onCreate(LifecycleOwner owner) {
Log.e(TAG, "BaseLifeCycle-onCreate:"+owner.getClass().toString());
}

@OnLifecycleEvent(Lifecycle.Event.ON_START)
void onStart(LifecycleOwner owner) {
Log.e(TAG, "BaseLifeCycle-onStart:"+owner.getClass().toString());
}

@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
void onStop(LifecycleOwner owner) {
Log.e(TAG, "BaseLifeCycle-onStop:"+owner.getClass().toString());
}

@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
void onResume(LifecycleOwner owner) {
Log.e(TAG, "BaseLifeCycle-onResume:"+owner.getClass().toString());
}

@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
void onPause(LifecycleOwner owner) {
Log.e(TAG, "BaseLifeCycle-onPause:"+owner.getClass().toString());
}

@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
void onDestory(LifecycleOwner owner) {
Log.e(TAG, "BaseLifeCycle-onDestory:"+owner.getClass().toString());
}

@OnLifecycleEvent(Lifecycle.Event.ON_ANY)
void onAny(LifecycleOwner owner) {//无论当前活动处于何种生命周期状态,都会触发相应的生命周期方法
// Log.e(TAG, "BaseLifeCycle-onAny:"+owner.getClass().toString());
}

}