复制自《第一行代码-第三版》
Activity类中定义了7个回调方法,覆盖了Activity生命周期的每⼀个环
节,下⾯就来⼀⼀介绍这7个⽅法。
- onCreate()。这个⽅法你已经看到过很多次了,我们在每个Activity中都重写了这个⽅法,它会在Activity第⼀次被创建的时候调⽤。你应该在这个⽅法中完成Activity的初始化操作,⽐如加载布局、绑定事件等。
- onStart()。这个⽅法在Activity由不可⻅变为可⻅的时候调⽤。
- onResume()。这个⽅法在Activity准备好和⽤户进⾏交互的时候调⽤。此时的Activity⼀定位于返回栈的栈顶,并且处于运⾏状态。
- onPause()。这个⽅法在系统准备去启动或者恢复另⼀个Activity的时候调⽤。我们通常会在这个⽅法中将⼀些消耗CPU的资源释放掉,以及保存⼀些关键数据,但这个⽅法的执⾏速度⼀定要快,不然会影响到新的栈顶Activity的使⽤。
- onStop()。这个⽅法在Activity完全不可⻅的时候调⽤。它和
- onPause()⽅法的主要区别在于,如果启动的新Activity是⼀个对话框式的Activity,那么onPause()⽅法会得到执⾏,⽽onStop()⽅法并不会执⾏。onDestroy()。这个⽅法在Activity被销毁之前调⽤,之后Activity的状态将变为销毁状态。
- onRestart()。这个⽅法在Activity由停⽌状态变为运⾏状态之前调⽤,也就是Activity被重新启动了。
以上7个方法中除了onRestart()方法,其他都是两两相对的,从而又可以将Activity分为以下3种生存期。
- 完整⽣存期。Activity在onCreate()⽅法和onDestroy()⽅法之间所经历的就是完整⽣存期。⼀般情况下,⼀个Activity会在onCreate()⽅法中完成各种初始化操作,⽽在onDestroy()⽅法中完成释放内存的操作。
- 可⻅⽣存期。Activity在onStart()⽅法和onStop()⽅法之间所经历的就是可⻅⽣存期。在可⻅⽣存期内,Activity对于⽤户总是可⻅的,即便有可能⽆法和⽤户进⾏交互。我们可以通过这两个⽅法合理地管理那些对⽤户可⻅的资源。⽐如在onStart()⽅法中对资源进⾏加
载,⽽在onStop()⽅法中对资源进⾏释放,从⽽保证处于停⽌状态的Activity不会占⽤过多内存。 - 前台⽣存期。Activity在onResume()⽅法和onPause()⽅法之间所经历的就是前台⽣存期。在前台⽣存期内,Activity总是处于运⾏状态,此时的Activity是可以和⽤户进⾏交互的,我们平时看到和接触最多的就是这个状态下的Activity。
代码示例
MainActivity.kt
package com.example.activitylifecycletest
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.widget.Button
class MainActivity : AppCompatActivity() {
private val tag = "MainActivity"
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
Log.d(tag, "onCreate")
setContentView(R.layout.activity_main)
val startNormalActivity = findViewById<Button>(R.id.startNormalActivity)
startNormalActivity.setOnClickListener {
val intent = Intent(this, NormalActivity::class.java)
startActivity(intent)
}
val startDialogActivity = findViewById<Button>(R.id.startDialogActivity)
startDialogActivity.setOnClickListener {
val intent = Intent(this