源文地址:https://0x9.me/Qgv5i
LifeCycle 架構設計一大利器,旨在減少Activity和Fragment中代碼,簡化Activity和Fragment職責,實現功能代碼分離,達到解耦的目的。
官方解釋:
Lifecycle-aware components perform actions in response to a change in the lifecycle status of another component, such as activities and fragments. These components help you produce better-organized, and often lighter-weight code, that is easier to maintain.
譯文:Lifecycle-aware 組件感知Activity和Fragment的周明周期,並能響應個生命周期狀態。這個組件有助於產生更有序、更輕和更易維護的代碼。
優點
LifeCycle作用主要是針對開發中遇到的一些痛點,它的優點也是基於現有的痛點,主要以下有點:
減輕acitivity和fragment的負擔,實現調用方代碼更加更加簡潔
為封裝組件提供更好的支持,達到組件獨立,實現更好的內聚和更低的耦合
復用變得更加簡單
實現組合優於繼承的設計思想
沒有LifeCycle的時候
沒有LifeCycle組件的時候,我們實現一個定位功能通常會如下實現:
主程序代碼如下:
/**
-
定位功能一般實現方法
*/
public class LocationActivity extends AppCompatActivity {private LocationListener mLocationListener;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_location);
mLocationListener = new LocationListener();
}@Override
protected void onStart() {
super.onStart();
if (mLocationListener != null) {
mLocationListener.start();
}
}@Override
protected void onStop() {
super.onStop();
if (mLocationListener != null) {
mLocationListener.stop();
}
}
}
定位邏輯實現如下:
public class LocationListener {
public void start() {
Log.d("LifeCycleListener", "start");
}
public void stop() {
Log.d("LifeCycleListener", "stop");
}
}
從上面的代碼,可以發現,實現一個定位,我們需要在activity和fragment處理打開定位和關閉定位。這只是一個定位,在現實開發中,我們會有統計等很多類似的功能,這樣我們的activity和fragment代碼會變得臃腫,且代碼不易復用。
使用LifeCycle后
在我們使用LifeCycle之后,主程序如下:
public class LifeCycleActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_life_cycle);
getLifecycle().addObserver(new LocationListener());
}
}
定位邏輯如下:
/**
-
跟生命周期相關的監聽器
-
-
Created by zhenguo on 12/5/17.
*/
public class LocationListener implements LifecycleObserver {@OnLifecycleEvent(Lifecycle.Event.ON_START)
public void start() {
Log.d("LifeCycleListener", "start");
}@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
public void stop() {
Log.d("LifeCycleListener", "stop");
}@OnLifecycleEvent(Lifecycle.Event.ON_ANY)
void onAny(LifecycleOwner owner, Lifecycle.Event event) {
Log.d("LifeCycleListener", "onAny:" + event.name());
}
}
顯而易見,現在調用程序只需一行代碼,簡化了調用方的代碼,調用方不需要關心生命周期的處理邏輯,這部分邏輯轉移到具體的業務實現方,實現高內聚和低耦合。
參考地址
官方地址:https://developer.android.com/topic/libraries/architecture/lifecycle.html
源碼地址:https://github.com/jingle1267/AndroidArchitectureComponets
原文地址:https://0x9.me/Qgv5i