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

前言

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

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

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

Activity五个状态

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

关于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生命周期的各个环节,描述了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工程

 工程名LifeCycle, 语言选择Kotlin。

 主活动程序如下,只包含一个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。

 第一次启动时,过程为oncreate()->onstart()->onResume():

按home键退出时,过程为调用onStop():

 重新调入时,onRestart()->onstart()->onResume():

 横竖屏切换时,过程为onStop()->onDestory()->oncreate()->onstart()->onResume():

  • 23
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值