activity生命周期(这篇足够了)

您所在的位置:网站首页 activities的汉语 activity生命周期(这篇足够了)

activity生命周期(这篇足够了)

2023-08-17 14:20| 来源: 网络整理| 查看: 265

activity生命周期(这篇足够了) 前言

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

在这里插入图片描述 我们从以下几个知识点做分析:

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

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

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

4个的状态

启动状态(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() 在这里插入图片描述

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

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

横竖屏切换涉及到的是Activity的android:configChanges属性; android:configChanges可以设置的属性值有:

orientation:消除横竖屏的影响keyboardHidden:消除键盘的影响screenSize:消除屏幕大小的影响 public class MainActivity extends AppCompatActivity { public static final String TAG=“MainActivity”; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.i(TAG,"onCreate"); setContentView(R.layout.activity_main); } @Override protected void onStart() { super.onStart(); Log.i(TAG,"onStart"); } @Override protected void onResume() { super.onResume(); Log.i(TAG,"onResume........."); } @Override protected void onPause() { super.onPause(); Log.i(TAG,"onPause"); } @Override protected void onStop() { super.onStop(); Log.i(TAG,"onStop"); } @Override protected void onDestroy() { super.onDestroy(); Log.i(TAG,"onDestroy"); }

运行Activity,生命周期如下: 在这里插入图片描述 切换横屏,生命周期如下: 在这里插入图片描述 再切回竖屏,生命周期如下: 在这里插入图片描述 修改AndroidManifest.xml,添加android:configChanges="orientation"并切换横屏,生命周期如下: 在这里插入图片描述 再切换竖屏,生命周期如下: 在这里插入图片描述 修改AndroidManifest.xml,属性改为android:configChanges=“orientation|keyboardHidden|screenSize”,切换横屏,生命周期如下: 在这里插入图片描述 再切换回竖屏,生命周期如下: 在这里插入图片描述

结论

设置Activity的android:configChanges属性为orientation或者orientation|keyboardHidden或者不设置这个属性的时候,横竖屏切换会重新调用各个生命周期方法,切横屏时会执行1次,切竖屏时会执行1次; 设置Activity的属性为android:configChanges="orientation|keyboardHidden|screenSize"时,横竖屏切换不会重新调用各个生命周期方法,只会执行onConfigurationChanged方法;

Activity四种启动方式

一个项目中会包含多个activity,系统中使用任务栈来存储这些activity,任务栈呢,是一种“后进先出”的栈结构。举个栗子:当我们多次启动同一个(没有设置启动方式–即默认的启动方式)的activity的时候,系统会创建多个实例依次进入栈中。当back返回的时候,每按一次,一个activity出栈。直至栈空为止。

在这里插入图片描述

Standard 标准模式

无论任务栈内是否已经存在要启动的Activity实列,都会创建一个Activity放入任务栈,并置于栈顶。 使用场景:默认使用大多数场景

SingleTop栈顶复用模式

如果任务栈已经存在一个要启动的Activity实列,就复用该Activity置于栈顶不会重新创建Activity的实列,复用Activity会执行onNewIntent方法,但是onCreate.onStart方法不会执行,因为它没有改变.如果任务栈中或者任务栈顶没有实例就创建一个Activity实例存入其中,置于栈顶。 使用场景:适合接收通知内容显示页面,当用户从任务栏中进入查看消息内容界面时,如果设置为singleTop时,这样每次行为都使用同一个实例,用户点击返回时不会存在多个消息页面的情况。

SingleTask栈内复用模式

如果栈内已经存在要启动的Activity实例,就把该Activity栈上面的activity清出栈,让该activity置于栈顶,如果复用它的onNewIntent方法会被回调,但是onCreate.onStart方法不会执行,因为它没有改变. 使用场景:APP的首页,当你需要到某个页面时,关闭之前所打开的Activity可以用到。

SingleInstance单实例模式

这种模式启动的Activity实例单独占用一个任务栈,也就是启动该模式的Activity同时给它分配一个任务栈。 使用场景:singleInstance适合需要与程序分离开的页面。例如闹铃提醒,将闹铃提醒与闹铃设置分离。singleInstance不要用于中间页面,如果用于中间页面,跳转会有问题,比如:A -> B (singleInstance) -> C,完全退出后,在此启动,首先打开的是B。

使用方式


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3