Activity生命周期的demo
/**
* Activity生命周期的demo
* 一般执行顺序,从创建到销毁
* onCreate->onStart->onResume->onPause->onStop->onDestroy
* 重新打开activity
* onRestart->onStart->onResume->onPause->onStop->onDestroy
*
* 一般情况下
* onCreate、onStart、onResume、onRestart是一起的,
* onRestart调用会紧接着调用onStart
* onStart调用会紧接着调用onResume
*
* 同理onPause、onStop也是一起的
* onPause调用会紧接着调用onStop
*
*/
class ActivityDemoActivity : AppCompatActivity() {
/**
* 在首次创建 Activity 时调用
* 一些初始化的工作可以在这里完成
*/
override fun onCreate(savedInstanceState: Bundle?) {
Log.i(TAG, "onCreate>>>>>start")
super.onCreate(savedInstanceState)
//获取页面
val binding = ActivityDemoBinding.inflate(layoutInflater)
setContentView(binding.root)
//监听器 打开一个activity
binding.demo1.setOnClickListener {
startActivity(Intent(this, ActivityDemo2Activity::class.java))
}
//finish
binding.demo2.setOnClickListener { finish() }
//打开一个activity,然后finish
binding.demo3.setOnClickListener {
startActivity(Intent(this, ActivityDemo2Activity::class.java))
finish()
}
Log.i(TAG, "onCreate>>>>>end")
}
/**
* 在Activity被停止后再次启动时调用
* 紧接着会调用onStart方法,
* 一些“activity第一次启动时候不启动,activity再次启动的时候”的业务可以写在这里
*/
override fun onRestart() {
Log.i(TAG, "onRestart>>>>>start")
super.onRestart()
Log.i(TAG, "onRestart>>>>>end")
}
/**
* 在 Activity 即将对用户可见之前调用
* 一些定时业务可以在这里开始
*/
override fun onStart() {
Log.i(TAG, "onStart>>>>>start")
super.onStart()
Log.i(TAG, "onStart>>>>>end")
}
/**
* 在 Activity 即将开始与用户进行交互之前调用
* 这里页面也绘制结束,可以在这里获取控件的实际宽高
*/
override fun onResume() {
Log.i(TAG, "onResume>>>>>start")
super.onResume()
Log.i(TAG, "onResume>>>>>end")
}
/**
* 在系统即将开始继续另一个 Activity或返回Home的时候调用
* 它应该非常迅速地执行所需操作,因为它返回后,下一个 Activity 才能继续执行,所以不能执行耗时操作。
* 紧接着会调用onStop方法
* 极端情况,就是如果onPause的时候快速返回当前Activity,则会调用onResume方法
*/
override fun onPause() {
Log.i(TAG, "onPause>>>>>start")
super.onPause()
Log.i(TAG, "onPause>>>>>end")
}
/**
* 在 Activity 对用户不再可见时调用
* 如果重新返回当前Activity,会调用onRestart
* 如果Activity被销毁,会调用onDestroy方法
*
*/
override fun onStop() {
Log.i(TAG, "onStop>>>>>start")
super.onStop()
Log.i(TAG, "onStop>>>>>end")
}
/**
* 在Activity被销毁前调用
* 当Activity结束(对Activity调用了finish方法),
* 或系统为节省空间而暂时销毁该Activity实例时,可能会调用它。
* 可以通过 isFinishing 方法区分这两种情形。
*/
override fun onDestroy() {
Log.i(TAG, "onDestroy>>>>>start")
super.onDestroy()
Log.i(TAG, "onDestroy>>>>>end->isFinishing=$isFinishing")
}
}