美文网首页
使用interface实现LifecycleObserver

使用interface实现LifecycleObserver

作者: swust_cp | 来源:发表于2021-02-02 14:10 被阅读0次

    当在kotlin中使用Interface来实现LifecycleObserver,并添加相关的lifecycle事件在接口上,如:

    interface PageObserver : LifecycleObserver {
        @OnLifecycleEvent(Lifecycle.Event.ON_START)
        fun onPageStart() {
            
        }
    
        @OnLifecycleEvent(Lifecycle.Event.ON_STOP)
        fun onPageStop() {
            
        }
    
        @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
        fun onPageDestroy() {
            
        }
    }
    
    

    在编译时会遇到如下的错误:

    error: 1st argument of a callback method must be a LifecycleOwner which represents the source of the event
            public static void onPageStart(xxx.PageObserver $this)
    

    意思是kotlin在编译阶段生成代码时,会将this插入第一个参数,当时必须的是LifecycleOwner

    下面介绍两种解决方式

    • 第一种是用

      annotationProcessor 'androidx.lifecycle:lifecycle-compiler:2.2.0'
      使用annotationProcessor代替kapt,这个是因为两者处理还是有一些内在区别,annotationProcessor通常用在java代码里面,kapt通常是针对kotlin代码
      // kapt 'androidx.lifecycle:lifecycle-compiler:2.2.0'
      
    • 第二种是用class代替interface

      class PageObserverClass(val pageObserver: PageObserver) : LifecycleObserver {
          @OnLifecycleEvent(Lifecycle.Event.ON_START)
          fun onPageStart() {
              pageObserver.onPageStart()
          }
      
          @OnLifecycleEvent(Lifecycle.Event.ON_STOP)
          fun onPageStop() {
                    pageObserver.onPageStop()
          }
      
          @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
          fun onPageDestroy() {
              pageObserver.onPageDestroy()
          }
      }
      

    相关文章

      网友评论

          本文标题:使用interface实现LifecycleObserver

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