Android Architecture Components之LifeCycle

源文地址: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

posted @ 2017-12-09 16:52  哀莫  阅读(1811)  评论(0编辑  收藏  举报

欢迎访问我的主页!