Jetpack 之 Lifecycle

46 阅读1分钟
}



@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)

fun lifeOnPause() {

    Log.v("zx", "取消注册广播")

    activity.unregisterReceiver(myBroadcastReceiver)

}

}




#### []( )使用LifecycleService解耦Service与组件



class LocationService : LifecycleService() {

override fun onCreate() {

    super.onCreate()

    lifecycle.addObserver(LocationObserver(this))

}

}

class LocationObserver(val context: Context) : LifecycleObserver {

@OnLifecycleEvent(Lifecycle.Event.ON_CREATE)

fun startLocation() {

    Log.v("zx","startLocation")

}



@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)

fun stopLocation() {

    Log.v("zx","stopLocation")

}

}

    binding.btnStartService.setOnClickListener {

        startService(Intent(this, LocationService::class.java))

    }

    binding.btnStopService.setOnClickListener {

        stopService(Intent(this, LocationService::class.java))

    }
<service android:name=".lifecycle.LocationService"/>



使用ProcessLifecycleOwner监听应用程序生命周期



class IApplication:Application() {

override fun onCreate() {

    super.onCreate()

    ProcessLifecycleOwner.get().lifecycle.addObserver(ApplicationObserver())

}

}

class ApplicationObserver:LifecycleObserver {

@OnLifecycleEvent(Lifecycle.Event.ON_CREATE)

fun onCreate(){

    Log.v("zx","Application  onCreate")

}

}




新版本AppCompatActivity和Fragment已经实现了LifecycleOwner,如果没实现需要怎么做呢  

下面使用Activity实现LifecycleOwner



class TestActivity : Activity(), LifecycleOwner {

private val mLifecycleRegistry = LifecycleRegistry(this)



override fun onCreate(savedInstanceState: Bundle?) {

    mLifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_CREATE)

    super.onCreate(savedInstanceState)

    setContentView(R.layout.activity_test)



    initLifecycle()

}



private fun initLifecycle() {

    lifecycle.addObserver(MyLifecycle())

}



override fun onStart() {

    super.onStart()

    mLifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_START)

}



override fun onResume() {

    super.onResume()

    mLifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_RESUME)

}



override fun onPause() {

    mLifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_PAUSE)

    super.onPause()

}



override fun onStop() {

    mLifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_STOP)

    super.onStop()

}



override fun onDestroy() {

    mLifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_DESTROY)

    super.onDestroy()

}



override fun getLifecycle(): Lifecycle {

    return mLifecycleRegistry

}

}

class MyLifecycle : LifecycleObserver {

@OnLifecycleEvent(Lifecycle.Event.ON_CREATE)

fun myOnCreate() {

    Log.v("zx", "myOnCreate")

}



@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)

fun myOnResume() {

    Log.v("zx", "myOnResume")



}



@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)

fun myOnPause() {

    Log.v("zx", "myOnPause")

}

}




这样TestActivity 里面的生命执行的时候MyLifecycle 也会执行



### []( )[Lifecycle官方库]( )



lifecycle-extensions 中的 API 已弃用。您可以为特定 Lifecycle 工件添加所需的依赖项。



dependencies {

    def lifecycle_version = "2.4.0"

    def arch_version = "2.1.0"



    // ViewModel

    implementation "androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version"

    // LiveData

    implementation "androidx.lifecycle:lifecycle-livedata:$lifecycle_version"

    // Lifecycles only (without ViewModel or LiveData)

    implementation "androidx.lifecycle:lifecycle-runtime:$lifecycle_version"



    // Saved state module for ViewModel

    implementation "androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version"



    // Annotation processor

    annotationProcessor "androidx.lifecycle:lifecycle-compiler:$lifecycle_version"

    // alternately - if using Java8, use the following instead of lifecycle-compiler

    implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version"



    // optional - helpers for implementing LifecycleOwner in a Service

    implementation "androidx.lifecycle:lifecycle-service:$lifecycle_version"



    // optional - ProcessLifecycleOwner provides a lifecycle for the whole application process

    implementation "androidx.lifecycle:lifecycle-process:$lifecycle_version"



    // optional - ReactiveStreams support for LiveData

    implementation "androidx.lifecycle:lifecycle-reactivestreams:$lifecycle_version"



    // optional - Test helpers for LiveData

    testImplementation "androidx.arch.core:core-testing:$arch_version"

}




更多: