美文网首页
JetPack之Lifecycle框架介绍

JetPack之Lifecycle框架介绍

作者: zhengLH | 来源:发表于2019-04-19 17:22 被阅读0次

    【传送门】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

    相关文章

      网友评论

          本文标题:JetPack之Lifecycle框架介绍

          本文链接:https://www.haomeiwen.com/subject/gtdcgqtx.html