Jetpack是Google为了解决Android架构问题而引入的,Google官方说的说法:“Jetpack是一套库、工具和指南,可以帮助开发者更轻松地编写应用程序。Jetpack中的组件可以帮助开发者遵循最佳做法、摆脱编写样板代码的工作并简化复杂的任务,以便他们能将精力集中放在业务所需的代码上。”
Jetpack主要包括4个方面,分别是架构(Architecture)、界面(UI)、行为(Behavior)和基础(Foundation)。
在项目中的gradle.properties文件中,
//是否使用AndroidX
android.useAndroidX=true
//是否将第三方库迁移到AndroidX
android.enableJetifier=true
Lifecycle
Lifecycle用来帮助开发者创建可感知生命周期的组件,使组件能够在其内部管理自己的生命周期,从而降低模块间的耦合度。
Jetpack提供了两类:LifecycleOwner(被观察者)和LifecycleObserver(观察者),即通过观察者模式,实现对页面生命周期的监听。
通过查看ComponentActivity源码,在最新的SDK包中,已经默认实现了LifecycleOwner接口。LifecycleOwner接口中只有一个getLifecycle(LifecycleObserver observer)方法,通过此方法实现了观察者模式。
public class ComponentActivity extends androidx.core.app.ComponentActivity implements
LifecycleOwner,
ViewModelStoreOwner,
HasDefaultViewModelProviderFactory,
SavedStateRegistryOwner,
OnBackPressedDispatcherOwner {
private final LifecycleRegistry mLifecycleRegistry = new LifecycleRegistry(this);
/**
* {@inheritDoc}
* <p>
* Overriding this method is no longer supported and this method will be made
* <code>final</code> in a future version of ComponentActivity. If you do override
* this method, you <code>must</code>:
* <ol>
* <li>Return an instance of {@link LifecycleRegistry}</li>
* <li>Lazily initialize your LifecycleRegistry object when this is first called.
* Note that this method will be called in the super classes' constructor, before any
* field initialization or object state creation is complete.</li>
* </ol>
*/
@NonNull
@Override
public Lifecycle getLifecycle() {
return mLifecycleRegistry;
}
}
使用方法
- 编写组件类实现LifecycleObserver接口
- 使用@OnLifecycleEvent(Lifecycle.Event.ON_XXX)注解对方法进行标识
import android.util.Log
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleObserver
import androidx.lifecycle.OnLifecycleEvent
class MyLifecycleObserver(tag: String) : LifecycleObserver {
private val TAG = tag
@OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
private fun onCreate() {
Log.d(TAG, "onCreate")
}
@OnLifecycleEvent(Lifecycle.Event.ON_START)
private fun onStart() {
Log.d(TAG, "onStart")
}
@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
private fun onResume() {
Log.d(TAG, "onResume")
}
@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
private fun onPause() {
Log.d(TAG, "onPause")
}
@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
private fun onStop() {
Log.d(TAG, "onStop")
}
@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
private fun onDestroy() {
Log.d(TAG, "onDestroy")
}
}
- 在Activity/Fragment中引用组件,使用getLifecycle.addObserver()方法将Acitivyt/Fragment与组件绑定起来。
class MainActivity : AppCompatActivity() {
private val myLifecycleObserver = MyLifecycleObserver(MainActivity::class.java.simpleName)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
lifecycle.addObserver(myLifecycleObserver)
}
}
- 在Service中使用Lifecycle
- 添加依赖:implementation ‘androidx.lifecycle:lifecycle-extensions:2.2.0’
- 创建自己的Service类继承LifecycleService
- 在Service中引用组件类并进行绑定
import androidx.lifecycle.LifecycleService
class MyLifecycleService(): LifecycleService() {
private var name: String = MyLifecycleService::class.java.simpleName
private val myLifecycleObserver = MyLifecycleObserver(name)
init {
lifecycle.addObserver(myLifecycleObserver)
}
}
- 使用ProcessLifecycleOwner监听应用程序的生命周期
- 添加依赖:implementation ‘androidx.lifecycle:lifecycle-extensions:2.2.0’
- 在Application的onCreate中添加ProcessLifecycleOwner.get().lifecycle.addObserver()绑定
import android.app.Application
import androidx.lifecycle.ProcessLifecycleOwner
class MyApplication: Application() {
private val myLifecycleObserver = MyLifecycleObserver(MyApplication::class.java.simpleName)
override fun onCreate() {
super.onCreate()
ProcessLifecycleOwner.get().lifecycle.addObserver(myLifecycleObserver)
}
}
针对ProcessLifecycleOwner的使用需要注意几点:
- ProcessLifecycleOwner是针对整个应用程序的监听,与Activity数量无关
- Lifecycle.Event.ON_CREATE只会被调用一次,而Lifecycle.Event.ON_DESTROY永远不会被调用
- 当应用程序从后台回到前台,或者应程序被首次打开时,会依次调用Lifecycle.Event.ON_START和Lifecycle.Event.ON_RESUME
- 当应用程序从前台推到后台(用户按下Home键或任务菜单键),会依次调用Lifecycle.Event.ON_PAUSE和Lifecycle.Event.ON_STOP。这两个方法的调用会有一定的延后,系统需要为“屏幕旋转,由于配置发生变化而导致Activity重新创建”的情况预留一些时间。