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()); } }
显而易见,现在调用程序只需一行代码,简化了调用方的代码,调用方不需要关心生命周期的处理逻辑,这部分逻辑转移到具体的业务实现方,实现高内聚和低耦合。
注:本文内容来自互联网,旨在为开发者提供分享、交流的平台。如有涉及文章版权等事宜,请你联系站长进行处理。