当系统创建一个新的Activity实例时,回调方法从塔的底部一级一级地移动到塔的顶部。当它位于金字塔的顶部时,活动位于用户的前台,此时用户可以与活动进行交互。当用户想要离开活动时,系统调用另一系列方法将活动的状态从顶部移到底部。在某些情况下,Activity只完成部分状态迁移并等待用户的指令,然后返回到塔顶。
根据活动的复杂性,您可能不必实现所有的生命周期方法。但是,理解每个生命周期回调函数的含义非常重要,以确保您的应用程序按照用户的期望正确运行。
要正确实现生命周期的回调方法,从而使应用程序正确动作,需要注意以下几点:
确保用户使用你时,应用程序可以接听电话或切换到其他应用程序,而不会崩溃。确保您的应用程序在用户不使用时不会消耗系统资源。
确保用户在从其他应用程序切换回您的应用程序时可以继续他们以前的工作,并且在切换用户屏幕或其他 *** 作时不会崩溃或丢失用户数据。
单个Actiivty正常的生命周期
onCreate ->onStart ->onResume ->onPause ->onStop ->onDestory
这就是一个Activity从被创建到被销毁过程。
其中正常运行状态为onResume
当Activity从前台被置于后台,
onResume ->onPause ->onStop
当从后台重新置于前台
onStop ->onPause ->onResatrt ->onStart->onResume
其中可以发现,只要Activity置于前台都会执行onStart函数,所以我们可以考虑在这里做一下需要在前台就处理的逻辑
各个生命周期函数:
onCreate: Activity被创建,此时Activity处于不可见、不可交互
onStart: 此时Activity 部分可见不可交互
onRestart: Activity从后台重新回到前台,部分可见不可交互
onResume: 完全可见可交互,为Activity正常运行状态
onPause: Activity处于暂停,从前台被置于后台 部分可见部分不可见,不可交互
onStop: 完全置于后台,完全不可见,
onDestroy: Activity被销毁
上面就是一个正常的Activity的生命周期,
在Activity生命周期中,还设计一些其他:
Activity旋转:
onCreate ->onStart ->onResume
此时被旋转
->onPause ->onSaveInstanceState ->onStop ->onDestroy ->onCreate ->onStart ->onRestoreInstanceState ->onResume
可以发现当Activity被旋转时,整个Activity是被销毁然后重新创建的。其中新增调用了两个生命周期函数
onSaveInstanceState: 当Activity被系统异常销毁时被调用,用于存储数据,用于系统恢复Activity时恢复数据
onRestoreInstanceState: 当Actiivty被系统异常销毁并重新创建时,取出在onSaveInstanceState时存储的数据
注意,在onCreate函数中,其实也是有参数的
此处的savedInstanceState也是在onSaveInstanceState时存储的数据,但此处可能为nll,
因为在正常的Activity时,此处就是null,只有在Activity被异常销毁然后被系统重新创建时,此处才有值。
如果要在此处使用,切记要判空。
onNewIntent与Activity的启动模式有关
当Activity未设置启动模式时,则不会触发该生命周期函数
当Activity已经处于应用的Activity栈中
onNewIntent只会在Activity设置了启动模式,并且Activity被复用时才会调起。
注意:只对startActivityForResult调起的Activity起作用,statActivity本质调用的也是startActivityForResult,Activity正常的切换前后台时不会触发的。
A ->B:
A正常运行处于 onResume,打开B
A onPause ->B onCreate ->B onStart ->B onResume ->A onStop
点击跳入B页面, 首先A进入暂停,B开始创建,到onResume完全可见可交互,于是A被完全遮挡,变成完全不可见、处于后台,进入onStop
A ->B ->goBack->A
在B页再执行返回
B onPause ->A onRestart ->A onStart ->A onResume ->B Stop ->B onDestory
和A进入B类似,B返回A时,B进入暂停,A变得重新可见到A完全可见,进入onResume,然后B进入停止,并销毁
B启动模式设置为 SingleTop,B ->B
B onPause ->B onNewIntent ->B onResume
因为 B已经处于栈顶,启动模式为 SingleTop 则不会重新创建B的实例
将A的启动模式设置为SingleTask
可以通过在andorid studio的终端 Terminal中输入:adb shell dumpsys activity
查看当前应用的Activity task栈
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)