Android Jetpack架構組件—Lifecycle
Lifecycle是什么?
官方文檔是這么描述的,Lifecycle它是一個類,用來存儲相關組件的生命周期狀態(tài),如Activity或者Fragment等。并且允許其他組件對這些狀態(tài)進行觀察。
通俗的解釋:
觀察Activity或者Fragment的生命周期變化,在相應的生命周期回調(diào)中做一些操作。比如:比如在onDestory取消網(wǎng)絡請求等;
Lifecycle框架關鍵類:
LifecycleOwner:生命周期的擁有者,一般是Activity和Fragment實現(xiàn)這個接口,只有一個方法getLifecycle():Lifecycle
Lifecycle:表示一個生命周期過程對象,可以添加生命周期觀察者
Lifecycle.State:生命周期枚舉,有DESTROYED、INITIALIZED、CREATED、STARTED、RESUMED
LifecycleRegistry:Lifecycle的子類,對Lifecycle中的抽象方法進行了實現(xiàn)
LifecycleObserver:生命周期觀察者,雖是個空接口,但可以通過Lifecycle的注解定義所有的生命周期方法
Lifecycle.Event:生命周期事件,和Activity/Fragment的相應生命周期回調(diào)一一對應,有ON_CREATE、ON_START、
ON_RESUME、ON_PAUSE、ON_STOP、ON_DESTROY、ON_ANY七種取值,一般和OnLifecycleEvent注解一起使用,用來
在LifecycleObserver中標注方法屬于哪個生命周期
LifecycleDemo代碼體現(xiàn)
public class MyObserver implements LifecycleObserver {
@OnLifecycleEvent (Lifecycle.Event.ON_ANY)
void onAny(LifecycleOwner owner, Lifecycle.Event event) {
Log.e("MyObserver", "==onAny==");
}
@OnLifecycleEvent (Lifecycle.Event.ON_CREATE)
void onCreate() {
Log.e("MyObserver", "==onCreate==");
}
@OnLifecycleEvent (Lifecycle.Event.ON_DESTROY)
void onDestroy() {
Log.e("MyObserver", "==onDestroy==");
}
@OnLifecycleEvent (Lifecycle.Event.ON_START)
void onStart() {
Log.e("MyObserver", "==onStart==");
}
@OnLifecycleEvent (Lifecycle.Event.ON_STOP)
void onStop() {
Log.e("MyObserver", "==onStop==");
}
@OnLifecycleEvent (Lifecycle.Event.ON_RESUME)
void onResume() {
Log.e("MyObserver", "==onResume==");
}
@OnLifecycleEvent (Lifecycle.Event.ON_PAUSE)
void onPause() {
Log.e("MyObserver", "==onPause==");
}
}
在Activity/Fragment的onCreate中注冊生命周期
public class MyGroupActivity extends BaseActivity<VideoView>{
public static void start(Context context, String url, String title, boolean isLive) {
Intent intent = new Intent(context, MyGroupActivity.class);
intent.putExtra(IntentKeys.URL, url);
intent.putExtra(IntentKeys.IS_LIVE, isLive);
intent.putExtra(IntentKeys.TITLE, title);
context.startActivity(intent);
}
@Override
protected int getLayoutResId() {
return R.layout.activity_my_group;
}
@Override
protected void initView() {
super.initView();
MyGroupView myLineView = findViewById(R.id.my_group_view);
Lifecycle lifecycle = getLifecycle();
//第一種方式 :MyObserver 類進行監(jiān)聽生命周期變化
lifecycle.addObserver(new MyObserver());
//第二張方式: 當前界面的監(jiān)聽
getLifecycle().addObserver(new GenericLifecycleObserver() {
@Override
public void onStateChanged(@NonNull LifecycleOwner source, @NonNull Lifecycle.Event event) {
Log.e("MyObserver", "==event=="+event);
}
});
}
}
打印log
2021-07-28 16:30:54.705 25012-25012/com.dueeeke.dkplayer E/MyObserver: ==onCreate==
2021-07-28 16:30:54.707 25012-25012/com.dueeeke.dkplayer E/MyObserver: ==onStart==
2021-07-28 16:30:54.707 25012-25012/com.dueeeke.dkplayer E/MyObserver: ==onResume==
2021-07-28 16:30:56.937 25012-25012/com.dueeeke.dkplayer E/MyObserver: ==onPause==
2021-07-28 16:30:57.386 25012-25012/com.dueeeke.dkplayer E/MyObserver: ==onStop==
2021-07-28 16:30:57.387 25012-25012/com.dueeeke.dkplayer E/MyObserver: ==onDestroy==
小結:
1,lifycycle 其實是用觀察者模式實現(xiàn)的,當 Activity 生命周期變化的時候,通知相應的 Observers 即觀察者。
2, lifecycle 可以將釋放資源的動作內(nèi)聚在自身,減少與調(diào)用者之間的耦合。