首先学习Activity的生命周期先要了解什么是返回栈,我们知道Activity是可以被创建很多个的,那这些被创建出来的Activity他们存放的规则我们就必须要知道。我们每个被new出来的Activity都会覆盖在上一个Activity上面,当在最新new出来的Activity中响应Back键时就会销毁这个Activity并返回到上一个被这个Activity覆盖的的Activity中去。可以将一组Activity看做一叠盘子,我们放一个盘子就会放在最顶上,而放在最上面的盘子也是最先被拿走的,同理一个新new出来的Activity它就会被放入在返回栈中且位于栈顶的位置,而我们响应Back键或者调用finish()去销毁一个Activity时就会去销毁处于栈顶的Activity,这就是栈的先进后出,后进先出的规则。用户看到的Activity便就是处于栈顶的Activity。
1.Activity的生存期
在Android Studio中新建一个Activity,Android Studio就已经给我们重写好了onCreate()方法:
onCreate():我们在每个Activity中都要重写了这个方法,它会在Activity第一次被创建的时候调用。我们应该在这个方法中完成Activity的初始化操作,比如加载布局、绑定事件等。
onStart():这个方法在Activity由不可见变为可见的时候调用。
完整生存期:Activity在onCreate()方法和onDestroy()方法之间所经历的就是完整生存期。一般情况下,一个Activity会在onCreate()方法中完成各种初始化操作,而在onDestroy()方法中完成释放内存的操作。
可见生存期:Activity在onStart()方法和onStop()方法之间所经历的就是可见生存期。在可见生存期内,Activity对于用户总是可见的,即便有可能无法和用户进行交互。我们可以通过这两个方法合理地管理那些对用户可见的资源。比如在onStart()方法中对资源进行加载,而在onStop()方法中对资源进行释放,从而保证处于停止状态的Activity不会占用过多内存。
前台生存期:Activity在onResume()方法和onPause()方法之间所经历的就是前台生存期。在前台生存期内,Activity总是处于运行状态,此时的Activity是可以和用户进行交互的,我们平时看到和接触最多的就是这个状态下的Activity。
想要用代码体验Activity的生命周期也很简单,我们可以在Activity中分别重写这7个方法然后在其中加上Log语句,多建两个Activity再加上几个跳转按钮以及Back按钮我们就可以体验完整的Activity生命周期了。
package com.example.textone
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
class MainActivity : AppCompatActivity() {
private val tag = "MainActivity"
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
override fun onStart() {
super.onStart()
Log.d(tag, "onStart")
}
override fun onResume() {
super.onResume()
Log.d(tag, "onResume")
}
override fun onPause() {
super.onPause()
Log.d(tag, "onPause")
}
override fun onStop() {
super.onStop()
Log.d(tag, "onStop")
}
override fun onDestroy() {
super.onDestroy()
Log.d(tag, "onDestroy")
}
override fun onRestart() {
super.onRestart()
Log.d(tag, "onRestart")
}
}