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());
}
}
定位逻辑如下:
/**
* 跟生命周期相关的监听器
* <p>
* 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
源文地址
http://ihongqiqu.com/2017/12/09/lifecycle/
作者为