JetPack之Lifecycle框架介绍

2019-04-19  本文已影响0人  zhengLH

【传送门】https://www.jianshu.com/p/b1208012b268

【剖析】

图片.png event枚举类.png state枚举类.png

【代码】

 public class LocationListener implements LifecycleObserver {

private boolean enable;
private LifecycleOwner owner;
private LocationCallBack callBack;

public LocationListener(LifecycleOwner owner, LocationCallBack callBack) {
    this.owner = owner;
    this.callBack = callBack;
    //......
}

//如此则会自动感知生命周期,并调用相应操作
@OnLifecycleEvent(Lifecycle.Event.ON_START)
public void onStart() {
    if (enable) {
        //开始定位,在此之前可能需要检测网络、用户信息、等各种状态,存在耗时,若不用lifecycle时候,就会出现在这里耗时检测
        // 而未真的start定位之前,activity就被stop,同时listener也被调用stop,即出现了本listener在start之前调用了stop的异常现象
    }
}

public void enable() {
    enable = true;
    if (owner.getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.STARTED)) {
        //判断,如果没有开始定位,就再次开启定位,定位成功,使用callback回调UI刷新
        callBack.onSuccess();
    }
}

@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
public void onStop() {
    //do some stop operate
}

interface LocationCallBack {
    void onSuccess();
   }
}

【使用】

public class LifeActivity extends AppCompatActivity {

private LocationListener mListener;

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_life);
    //AppcompatActivity 的基类 componentActivity实现了lifecycle接口
    mListener = new LocationListener(this, () -> {
        //更新UI的定位信息
    });

    //检测网络、用户信息之类的,这里存在耗时,
  //        Utils.checkInfo(result -> if (result) {
   //            //检测完成,才会enable,然后listener里面才会真正的start操作
  //            mListener.enable();
   //        });
}

/*
这里面就不用onStart 和onStop了,因为lifecycle可自动感知生命周期

@Override
protected void onStart() {
    super.onStart();
    mListener.onStart();
}

@Override
protected void onStop() {
    super.onStop();
    mListener.onStop();
    }
*/
}
图片.png
上一篇下一篇

猜你喜欢

热点阅读