Jetpack系列学习笔记整理一 之LifeCycles

学习最好的途径就是官网和github Demo,先放链接,想看自行跳转:

  1. 官网:https://developer.android.com/topic/libraries/architecture/lifecycle
  2. CodeLab:LifeCycle (官方小课堂...)

Jetpack框架内容之前就接触过,但是一直没有好好系统学习,最近在忙项目还有弄cocos的东西,趁现在有时间了好好整理一下提升一下自己,毕竟google爸爸指明了方向给出了应用架构的方案。奥,大概长这样:

 

Jetpack是一套组件或者工具

 

比如很熟悉的DataBinding ,ViewModel等,接下来我主要学习Architecture架构组件,会从上往下一点一点学习记录。

LifeCycles的作用:它主要是处理生命周期的组件,有很多sdk或者广播接受者或者其他都需要在Activity或者Fragment开始时初始化,在结束时释放以免造成内存泄漏或者其他错误。如果我们有很多管理界面或者组件需要处理,都堆在onStart()onResume()影响周期状态并且难以管理。所以LifeCycle就是用来弹性和隔离的方式解决这个问题,尤其在使用MVVM架构时特别好用,ViewModel处理业务逻辑和数据,可以通过LifeCycle在ViewModel中处理生命周期的操作。

使用

  1. 实现LifecycleObserver接口
  2. LifeCycle的addObserver方法添加观察者
  3. 通过@OnLifecycleEvent(Lifecycle.Event.ON_RESUME) 注解方式给方法加上注解,就实现了生命周期的调用

示例:
 

    public class MyObserver implements LifecycleObserver {
        @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
        public void connectListener() {
            ...
        }

        @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
        public void disconnectListener() {
            ...
        }
    }

    myLifecycleOwner.getLifecycle().addObserver(new MyObserver());
    
  • 这个myLifecycleOwner是单一方法接口 它有getLifecycle()方法,26api以上Activity和Fragment已经实现了该接口所以在Activity中使用的时候直接通过getLifecycle().addObserver(new MyObserver());添加使用就行。这样我们就可以在model中处理有关生命周期的一些操作。当然为了安全,可以通过lifecycle.getCurrentState()方法验证是否处于该生命周期
 if (lifecycle.getCurrentState().isAtLeast(STARTED)) {
             
}
  • 如果在api26之前可以通过自定义的方法使用:
    public class MyActivity extends Activity implements LifecycleOwner {
        private LifecycleRegistry lifecycleRegistry;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

            lifecycleRegistry = new LifecycleRegistry(this);
            lifecycleRegistry.markState(Lifecycle.State.CREATED);
        }

        @Override
        public void onStart() {
            super.onStart();
            lifecycleRegistry.markState(Lifecycle.State.STARTED);
        }

        @NonNull
        @Override
        public Lifecycle getLifecycle() {
            return lifecycleRegistry;
        }
    }
    

LifeCycle的学习大概就是这样,有关生命周期管理 Google爸爸说了要在ViewModel中处理数据逻辑 但不包括网络请求,尽量不要传递Activity的上下文和View的上下文避免内存泄漏,尽量不要再Activity或者Fragment中处理数据和逻辑,保持干净。当之后学完ViewModel和LiveData 还有DataBinding之后,就会发现,UI显示的处理和异常的处理真的方便。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值