[聚合文章] Android Architecture Components之LifeCycle

软件架构 2017-12-09 20 阅读

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作用主要是针对开发中遇到的一些痛点,它的优点也是基于现有的痛点,主要以下有点:

  1. 减轻acitivity和fragment的负担,实现调用方代码更加更加简洁
  2. 为封装组件提供更好的支持,达到组件独立,实现更好的内聚和更低的耦合
  3. 复用变得更加简单
  4. 实现组合优于继承的设计思想

没有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());
    }

}

显而易见,现在调用程序只需一行代码,简化了调用方的代码,调用方不需要关心生命周期的处理逻辑,这部分逻辑转移到具体的业务实现方,实现高内聚和低耦合。

注:本文内容来自互联网,旨在为开发者提供分享、交流的平台。如有涉及文章版权等事宜,请你联系站长进行处理。