}
@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"
}
更多: