2-10Lifecycle知识点速览

Lifecycle知识点速览

一、lifecycle组件概览,为什么有它,服务启动然后停止这样一个生命周期,如果服务没有启动,然后停止肯定崩溃,所以希望有lifecycle

  1. 依赖库

//  implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'//已经废弃 
//以下依赖可以不写,但为了一致性,需要进行编写
    implementation 'androidx.lifecycle:lifecycle-runtime:2.3.0-alpha05'
    kapt "androidx.lifecycle:lifecycle-common-java8:2.3.0-alpha05"

默认创建project的时候,core\appcompatandroidx依赖库即包含对应lifecycle的依赖

./gradlew 'moduleName':dependencies指令 查看依赖库结构

  1. 主要依赖包

    lifecycle-runtimelifecycle-common

    • lifecycle-runtime

      • Lifecycleregistry

      • ReportFragment

      • LifecycleRegistryOwner

    • lifecycle-common

二、Lifecyle基础使用

  • 原理 Observable 观察者模式

  • 继承ComponentActivity的子类,而不是Activity

//ComponentActivity 实现lifecycleOwner
mLifecycleRegistry
getState//
addObserver

class MainActivity : AppCompatActivity() {
​
    private val mockPlayer = MockMediaPlayer()
​
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
//        mockPlayer.onCreate()
        MockMediaPlayer2(this)
//        MockMediaPlayer3(this)
        Log.i("MainActivity", "onCreate")
​
    }
}
  • 媒体播放,位置获取,添加生命周期感知,自定义observer实现,两种方式实现

  • //第一种 需要自己通过注解的方式和对应的周期对应起来
    class MockMediaPlayer2(private val owner: LifecycleOwner) : LifecycleObserver {
    ​
        private lateinit var player: MediaPlayer
    ​
        init {
            //关联生命周期的观察者
            owner.lifecycle.addObserver(this)
        }
    ​
        @OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
        fun onCreate() {
            player = MediaPlayer()
            Log.d("MockMediaPlayer2", "onCreate")
        }
    ​
        @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
        fun onResume() {
            thread {
                SystemClock.sleep(3000)//模拟阻塞1s
                if (owner.lifecycle.currentState.isAtLeast(Lifecycle.State.STARTED)) {
                    player.start()
                    Log.d("MockMediaPlayer2", "onResume")
                }
            }
        }
    ​
        @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
        fun onPause() {
            player.stop()
            Log.d("MockMediaPlayer2", "onPause")
        }
    ​
        @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
        fun onDestroy() {
            player.release()
            Log.d("MockMediaPlayer2", "onDestroy")
        }
    ​
    }

  • observer添加至lifecycleOwner

    //第二种方式 lifecycleOwner一定要在初始化里面
    class MockMediaPlayer3(private val owner: LifecycleOwner) : LifecycleEventObserver {
    ​
        private lateinit var player: MediaPlayer
    ​
        init {
            //关联生命周期的观察者
            owner.lifecycle.addObserver(this)
        }
    ​
        override fun onStateChanged(source: LifecycleOwner, event: Lifecycle.Event) {
            when (event) {
                Lifecycle.Event.ON_CREATE -> {
                    Log.d("MockMediaPlayer3", "onCreate")
                    player = MediaPlayer()
                }
                Lifecycle.Event.ON_START, Lifecycle.Event.ON_RESUME -> {
                    if (owner.lifecycle.currentState.isAtLeast(Lifecycle.State.STARTED)) {
                        player.start()
                        Log.d("MockMediaPlayer3", "onResume")
                    }
                }
                Lifecycle.Event.ON_PAUSE, Lifecycle.Event.ON_STOP -> {
                    player.stop()
                    Log.d("MockMediaPlayer3", "onPause")
                }
                Lifecycle.Event.ON_DESTROY -> {
                    player.release()
                    Log.d("MockMediaPlayer3", "onDestroy")
                }
                Lifecycle.Event.ON_ANY -> Log.d("MockMediaPlayer3", "onAny")
            }
        }
    ​
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值