Activity生命周期

Activity生命周期

一、初步了解

Activity是由栈管理的,但是为避免问题复杂化,我们可以暂时将所有的Activity当成在一个栈中管理,它遵循先进先出原则,每一个新生成的Activity都会被压入栈中。

一个activity生命周期,大体可以分为四个状态:
1、前台运行:Activity在栈顶,并在屏幕最前方;
2、切换暂停:Activity不在栈顶,但是有部分或全部显示 ( 例如栈顶Activity透明或未完全覆盖屏幕 );
3、后台停止:Activity不再栈顶,并完全不可见;
4、程序销毁:Activity被人为结束或者因系统原因(内存不足等)被GC回收;

二、进一步深入

详细的生命周期入如下图:
这里写图片描述

1、onCreate():正在创建Activity,进行界面资源加载,初始化Activity所需要的各种数据,此时Activity对用户不可见;

2、onStart():正在启动Activity,此时Activity仍在加载内容,正准备显示界面,无法获取焦点,不能与用户交互;

3、onResume():完成创建Activity,界面对用户可见,且可以触发事件,能与用户进行交互;

4、onPause():暂停Activity活动,此时界面对用户部分或全部(如被透明界面覆盖)可见,但是无法进行交互;

5、onStop():停止Activity活动,此时界面对用户不可见;

6、onDestroy():销毁Activity,销毁所有视图;

7、onRestart():重启Activity,重新加载视图;

注意:
  • onStart():Activity还未完全显示,不能参与用户交互;

  • onResume():Activity可见,可以参与用户交互;

  • onPause():
    (1)、不推荐在这里做耗时操作,这可能导致界面的跳转或恢复变得不流畅(因为所有的再显示操作都需要执行onResume()方法,但是这个方法会等待onPause()方法执行完毕—-哪怕是跳转到新的Activity,他也会等待当前Activity的onPause()方法执行完毕),反而推荐在这里进行一些次要资源的释放,如动画的停止等;

    (2)、在这个状态下如果切换回原Activity,它会直接调用onResume()进行界面显示,即onPause() —> onResume();

  • onStop():
    (1)、在某些极端条件下,这个方法可能不被执行,同理,onDestroy()也是一样(直接被用户杀死);

    (2)、在这个状态切换会原Activity,他会先调用onRestart(),然后调用onStart(),最后调用onResume()进行界面显示,即onStop() —> onRestart() —> onStart() —> onResume();

三、知识补充

1、Activity的四种模式
  • standard:标准启动模式,每次启动Activity都会创建一个新的Activity实例,并且将其压入任务栈栈顶,而不管这个Activity是否已经存在,此时 onCreate()、onStart()、onResume() 都会执行;
  • singleTop:栈顶复用模式,如果新Activity已经位于任务栈的栈顶,那么此Activity不会被重新创建,而是直接复用栈顶的实例,此时 onCreate()、onStart()、onResume()不会会执行,而且Activity的onNewIntent()方法会被回调,如果Activity已经存在但是不在栈顶,那么就会与standard模式一样;
  • singleTask:栈内复用模式,如果栈中已经有一个Activity实例,那么这个Activity就会被调到栈顶复用,并且singleTask会清理在当前Activity上面的所有Activity,此时Activity的onNewIntent()方法会被回调;
  • singleInstance:这种模式的Activity只能单独位于一个任务栈内,由于栈内复用的特性,后续请求均不会创建新的Activity,除非这个独特的任务栈被系统销毁了

注意:在xml中使用android:launchMode=”standard|singleInstance|singleTask|singleTop”设置这些模式

2、Activity的数据恢复
  • onSaveInstanceState():当Activity存在被回收销毁的可能的时候,这个方法会被调用(用户主动销毁除外),该方法中有一个Bundle参数,可以使用putString()、putInt()等方法进行数据保存,onCreate也有一个Bundle类型的参数,这之后可以在onCreate中恢复。
  • 下面是系统几种可能调用onSaveInstanceState()的情况
    (1)、按HOME键
    (2)、在历史记录中选择其他应用程序
    (3)、熄屏的时候
    (4)、屏幕切换的时候(横竖屏切换等,未指定configchange的情况下)
  • onRestoreInstanceState():当Activity确实被系统销毁(非用户主动销毁)之后调用;

注意

  • onSaveInstanceState()和onRestoreInstanceState()并不是非得成对使用的;
  • onSaveInstanceState()在onStop()之前调用,而onRestoreInstanceState()在onStart()之后调用;
  • 两者在使用时都记得调用父类super方法

例子

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //在Acivity是第一次被创建的时候这里为空,因此需要判断一下
        if( savedInstanceState != null ){
            savedInstanceState.getString("name");
        }

    @Override
    protected void onSaveInstanceState(Bundle outState) {
    outState.putString("name","Tom");
        super.onSaveInstanceState(outState);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值