Lifecycle-aware components是什么
Lifecycles是生命周期感知组件。
Lifecycle-aware components的功能
可以感知有生命周期的组件的生命周期变化,例如Activity和Fragment的生命周期的变化。
Lifecycle-aware components包含那些组件
Lifecycle组件包括LifecycleOwner、LifecycleObserver。
LifecycleOwner是具有生命周期的对象,比如Activity和Fragment;
LifecycleObserver观测LifecycleOwner,并在生命周期变化时收通知。
如何使用Lifecycles
1.引入相关依赖到项目中
dependencies {
def lifecycle_version = "1.1.1"
// ViewModel and LiveData
implementation "android.arch.lifecycle:extensions:$lifecycle_version"
// alternatively - just ViewModel
implementation "android.arch.lifecycle:viewmodel:$lifecycle_version" // use -ktx for Kotlin
// alternatively - just LiveData
implementation "android.arch.lifecycle:livedata:$lifecycle_version"
// alternatively - Lifecycles only (no ViewModel or LiveData).
// Support library depends on this lightweight import
implementation "android.arch.lifecycle:runtime:$lifecycle_version"
annotationProcessor "android.arch.lifecycle:compiler:$lifecycle_version" // use kapt for Kotlin
// alternately - if using Java8, use the following instead of compiler
implementation "android.arch.lifecycle:common-java8:$lifecycle_version"
// optional - ReactiveStreams support for LiveData
implementation "android.arch.lifecycle:reactivestreams:$lifecycle_version"
// optional - Test helpers for LiveData
testImplementation "android.arch.core:core-testing:$lifecycle_version"
}
2.编写监听类
package com.architecture.demo.lifecycle;
import android.arch.lifecycle.Lifecycle;
import android.arch.lifecycle.LifecycleObserver;
import android.arch.lifecycle.OnLifecycleEvent;
import android.util.Log;
import com.architecture.demo.util.CONSTANT;
public class MyObserver implements LifecycleObserver {
private Lifecycle lifecycle;
public MyObserver(Lifecycle lifecycle) {
this.lifecycle = lifecycle;
}
@OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
protected void onCreate() {
Log.i(CONSTANT.TAG_LIFECYCLE, "onCreate");
Lifecycle.State currentState = getCurrentState();
Log.i(CONSTANT.TAG_LIFECYCLE, "state_" + currentState);
}
@OnLifecycleEvent(Lifecycle.Event.ON_START)
protected void onStart() {
Log.i(CONSTANT.TAG_LIFECYCLE, "onStart");
}
@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
protected void onResume() {
Log.i(CONSTANT.TAG_LIFECYCLE, "onResume");
}
@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
protected void onPause() {
Log.i(CONSTANT.TAG_LIFECYCLE, "onPause");
}
@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
protected void onStop() {
Log.i(CONSTANT.TAG_LIFECYCLE, "onStop");
}
@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
protected void onDestroy() {
Log.i(CONSTANT.TAG_LIFECYCLE, "onDestroy");
}
public Lifecycle.State getCurrentState() {
return lifecycle.getCurrentState();
}
}
3.在Activity中注册该监听
package com.architecture.demo;
import android.arch.lifecycle.Lifecycle;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import com.architecture.demo.lifecycle.MyObserver;
import com.architecture.demo.util.CONSTANT;
import com.architecture.demo.util.Utils;
public class LifecycleActivity extends AppCompatActivity {
MyObserver myObserver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_lifecycle);
myObserver = new MyObserver(getLifecycle());
getLifecycle().addObserver(myObserver);
}
public void getState(View view) {
Lifecycle.State currentState = myObserver.getCurrentState();
Utils.showToast(getApplicationContext(), "state_" + currentState);
Log.i(CONSTANT.TAG_LIFECYCLE, "state_" + currentState);
}
}
通过以上步骤MyObserver类即可监听LifecycleActivity的生命周期变化了。
生命周期的组件的状态(Activity和Fragment的状态)和Lifecycle.Event的对应关系如下图:
lifecycle-states.png
通过以上步骤既可完成Lifecycles的简单使用。
Demo地址:
https://github.com/CongYiMing/ArchitectureDemo