Activity的生存期(Kotlin示例)

这篇博客详细介绍了Android Activity的7个生命周期回调方法,包括onCreate(), onStart(), onResume(), onPause(), onStop(), onRestart()和onDestroy(),并解释了它们在不同场景下的调用时机。文章特别强调了完整生存期、可⻅生存期和前台生存期的概念,并通过Kotlin代码示例加深理解,涵盖了MainActivity.kt, NormalActivity.kt和DialogActivity.kt的实现。" 78057718,5837550,CentOS7.3 使用yum安装MySQL教程,"['Linux', 'centos', 'mysql']
摘要由CSDN通过智能技术生成

复制自《第一行代码-第三版》

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值