Jetpack,我觉得翻译为“飞行器”更好听,因为Google针对编程历史乱象,整理出一套组件库,帮助开发者创造更完美的应用作品。现在市面上,很多公司招聘面试要求渐渐把Jetpack看作必会技能,Google也在疯狂的安利Jetpack组件,和Kotlin一样属于亲儿子一样了。
如图所示,Jetpack是一个由多个技术库组成的套件,可帮助开发者遵循最佳做法,减少样板代码并编写可在各种Android版本和设备中一致运行的代码,让开发者精力集中编写重要的代码。
LifeCycle顾名思义是用来帮助开发者建立可感知生命周期的jetpack组件之一。LifeCycle在其内部管理自己的生命周期,从而解藕页面和组件,降低内存泄露发生的可能性,Activity、Fragment、Service、Application均有LifeCycle支持。
如图所示,LifeCycle用来监听Activity与Fragment的生命周期变化。
例如,一般我们在Activity中使用计时器时会在生命周期onPause和onReSume对其操作。因为计时器是长周期的变量,如果Activity关闭了,但没有关闭计时器,就会继续持用activity的引用造成内存泄露。
//自定义了控件,继承了Chronometer计时器,实现了LifecycleObserver接口 @SuppressLint("ViewConstructor") class MyChronometer : Chronometer, LifecycleObserver { constructor(context: Context, attributeSet: AttributeSet) : super(context, attributeSet) var elapsedTime: Long = 0 //计时开始 ,方法添加了注解 @OnLifecycleEvent(Lifecycle.Event.ON_RESUME) open fun startMeter() { base = SystemClock.elapsedRealtime() - elapsedTime start() } //计时暂停 ,方法添加了注解 @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE) open fun stopMeter() { elapsedTime = SystemClock.elapsedRealtime() - base stop() } }
class Step2Activity : AppCompatActivity() { private var chronometer: MyChronometer? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) //组件 chronometer = findViewById(R.id.chronometer) //添加观察者 lifecycle.addObserver(chronometer!!) } }
1、继承LifeCycle Observer方法
class lifecycleTest : LifecycleObserver { @OnLifecycleEvent(Lifecycle.Event.ON_CREATE) fun onCreate() { } @OnLifecycleEvent(Lifecycle.Event.ON_START) fun onStart() { } @OnLifecycleEvent(Lifecycle.Event.ON_RESUME) fun onResume() { } @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE) fun onPause() { } @OnLifecycleEvent(Lifecycle.Event.ON_STOP) fun onStop() { } @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY) fun onDestroy() { } }
2、添加观察者
lifecycle.addObserver(lifecycleTest)