安卓学习笔记之六:Activity生命周期验证(kotlin版本)

前言

Activity是安卓提供给用户与手机之间可交互的界面组件,也是四大组件中比较重要的组件。那么?
Activity从创建到销毁过程是怎么样的呢?

我们从以下几个知识点做分析:

  • Activity五个状态
  • Activity的生命周期
  • Activity横竖屏生命周期
  • Activity四种启动方式
  • Activity问题总结

Activity五个状态

Starting-> running-> poused-> stopped-> killed

安卓学习笔记之六:Activity生命周期验证(kotlin版本)_第1张图片

关于activity四个状态所在的生命周期:

  • 启动状态(Starting):Activity的启动状态很短暂,当Activity启动后便会进入运行状态(Running)。
  • 运行状态(Running):Activity在此状态时处于屏幕最前端,它是可见、有焦点的,可以与用户进行交互。如单击、长按等事件。即使出现内存不足的情况,Android也会先销毁栈底的Activity,来确保当前的Activity正常运行。
  • 暂停状态(Paused):在某些情况下,Activity对用户来说仍然可见,但它无法获取焦点,用户对它操作没有没有响应,此时它处于暂停状态。
  • 停止状态(Stopped):当Activity完全不可见时,它处于停止状态,但仍然保留着当前的状态和成员信息。如系统内存不足,那么这种状态下的Activity很容易被销毁。
  • 销毁状态(Destroyed):当Activity处于销毁状态时,将被清理出内存。

注:还有一种情况由于系统内存不足可能在Paused状态中直接被系统杀死达到killed状态。 

activity的生命周期

oncreate()->onstart()->onResume()->onRestart()->onPouse()->onStop()->onDestory()

 安卓学习笔记之六:Activity生命周期验证(kotlin版本)_第2张图片

上面图概括了activity生命周期的各个环节,描述了activity从生成到销毁的过程。

  • onCreate() : 在Activity创建时调用,通常做一些初始化设置;
  • onStart(): 在Activity即将可见时调用;
  • onResume(): 在Activity已可见,获取焦点开始与用户交互时调用;
  • onPause(): 在当前Activity被其他Activity覆盖或锁屏时调用;
  • onStop() : 在Activity对用户不可见时调用;
  • onDestroy() :在Activity销毁时调用;
  • onRestart() : 在Activity从停止状态再次启动时调用;                          

 下面在Android Studio上创建一个Empty Activity工程来验证activity生命周期的各个环节

创建一个Empty Activity工程 (kotlin版本)

 创建一个新的Empty Activity工程

安卓学习笔记之六:Activity生命周期验证(kotlin版本)_第3张图片

 工程名LifeCycle, 语言选择Kotlin。

安卓学习笔记之六:Activity生命周期验证(kotlin版本)_第4张图片 主活动程序如下,只包含一个Activity创建时调用的初始化方法onCreate()

package com.example.lifecycle

import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Surface
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview
import com.example.lifecycle.ui.theme.LifeCycleTheme

class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            LifeCycleTheme {
                // A surface container using the 'background' color from the theme
                Surface(
                    modifier = Modifier.fillMaxSize(),
                    color = MaterialTheme.colorScheme.background
                ) {
                    Greeting("Android")
                }
            }
        }
    }
}

@Composable
fun Greeting(name: String, modifier: Modifier = Modifier) {
    Text(
        text = "Hello $name!",
        modifier = modifier
    )
}

@Preview(showBackground = true)
@Composable
fun GreetingPreview() {
    LifeCycleTheme {
        Greeting("Android")
    }
}

创建其他Activity生命周期方法

其他方法为onstart(),onResume(),onRestart(),onPouse(),onStop()和onDestory()

为了可以调试看到各个生命周期的调用过程,定义一个字符串变量TAG="mytag", 在各个生命周期方法中调用Log.d()输出log。

    private val TAG = "mytag"
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            LifeCycleTheme {
                // A surface container using the 'background' color from the theme
                Surface(
                    modifier = Modifier.fillMaxSize(),
                    color = MaterialTheme.colorScheme.background
                ) {
                    Greeting("Android")
                }
            }
        }
        Log.d(TAG,"onCreate:")
    }

    override fun onStart() {
        super.onStart()
        Log.d(TAG,"OnStart:")
    }

    override fun onResume() {
        super.onResume()
        Log.d(TAG,"onResume:")
    }

    override fun onPause() {
        super.onPause()
    }

    override fun onStop() {
        super.onStop()
        Log.d(TAG,"onStop:")
    }

    override fun onRestart() {
        super.onRestart()
        Log.d(TAG, "onRestart:")
    }

    override fun onDestroy() {
        super.onDestroy()
        Log.d(TAG,"onDestroy:")
    }

在Logcat窗口观察过程

在虚拟设备上运行,打开Logcat窗口,跟踪变量mytag。

安卓学习笔记之六:Activity生命周期验证(kotlin版本)_第5张图片 第一次启动时,过程为oncreate()->onstart()->onResume():

安卓学习笔记之六:Activity生命周期验证(kotlin版本)_第6张图片按home键退出时,过程为调用onStop():

安卓学习笔记之六:Activity生命周期验证(kotlin版本)_第7张图片 重新调入时,onRestart()->onstart()->onResume():

安卓学习笔记之六:Activity生命周期验证(kotlin版本)_第8张图片

安卓学习笔记之六:Activity生命周期验证(kotlin版本)_第9张图片 横竖屏切换时,过程为onStop()->onDestory()->oncreate()->onstart()->onResume():

安卓学习笔记之六:Activity生命周期验证(kotlin版本)_第10张图片

安卓学习笔记之六:Activity生命周期验证(kotlin版本)_第11张图片

你可能感兴趣的:(android,学习,笔记)