Activity生命周期理解

其实,理解Activity周期写一个demo可以更好帮助我们体会。

package com.lcl.view;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.i("MM", "onCreate");
                // Activity正在被创建;可以做初始化操作 。比如调用setContentView加载界面布局资源,初始化Activity所需数据
    }

    @Override
    protected void onRestart() {
        super.onRestart();
        Log.i("MM", "onRestart");
        //Activity重新启动,Activity从不可见到可见,onRestart会被调用
    }

    @Override
    protected void onStart() {
        super.onStart();
        Log.i("MM", "onStart");
        //Activity正在被启动;此时,Activity可见,但是还没有出现在前台,无法和用户交互,可理解为用户不可见
    }

    @Override
    protected void onResume() {
        super.onResume();
        Log.i("MM", "onResume");
        //Activity已经可见,并且出现在前台并开始活动;与onStart()方法都表示Activity已经可见,
        // 区别是onStart()是后台可见,onResume()是前台可见
    }

    @Override
    protected void onPause() {
        super.onPause();
        Log.i("MM", "onPause");
        //表示Activity正在停止,正常情况下,紧接着onStop会被执行
    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.i("MM", "onStop");
        //Activity即将停止,可以做一些回收但不太耗时操作
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.i("MM", "onDestroy");
        //表示Activity即将被销毁,此时可以做一些回收和资源释放操作
    }
}

01)一个事物总是从诞生开始的,Activity作为重要的组件,它的生命周期也是如此。
第一个方法就是诞生onCreate(),那个它可以做些什么事情呢?
onCreate()表示Activity被创建,可以做初始化操作。比如,我们自己写的布局,一些数据初始化都通过这个方法呈现出来

02)新事物出现后,然后开始成长。这就是onStrat()方法。
onStart()方法表示Activity正在被启动,此时Activity由不可见变为可见,但是是后台可见,此时用户还是看不到,还不能与用户交互。

03)新事物出现,不能没用要不然有什么用呢。别着急,onResume()方法发挥作用时刻到了。
onResume()表示Activity可见,此时用户可见并且能交互。

04)但是,这几个方法不能解决所有突发情况。比如,我按了home键,这是有个方法叫onPause(),顾名思义,暂停,表示Activity正在停止,此时可以做一些简单保存,动画暂停等不耗时操作,太耗时会影响Activity显示。仅仅暂停是不行的,还需调用onstop()

05)onStop()表示Activity即将停止,此时可以做一些回收的操作,但同样不能太耗时。

06)onDestroy()方法是Activity即将销毁,此时可以做回收和资源释放操作。

07)onRestart()表示Activity重启,一般Activity从不可见变为可见,会执行此方法。

那么,手机运行一下程序
执行结果:
onCreate()
onStart()
onResume()
解释一下,Activity从开始创建(onCreate) 到启动 (onStart)然后我们能看到界面(onResume)就是这三个方法
此时按下home键,
执行结果:
onPause()
onStop()
解释一下,从界面出现到后台过程,先执行暂停(onPause)然后停止(onStop)
此时点击桌面程序,执行结果:
onRestart()
onStart()
onResume()
解释一下,从桌面点击时,此时是后台运行,从后台可见到前台可见在程序未销毁前提下,会执行重启,不需要重新创建,onRestart(),然后执行被启动onStart(),最后执行onResume()用户可见界面。
如果按下的是返回键,执行结果:
onPause()
onStop()
onDestroy()
解释一下,跟home键不同的是执行销毁了,此时程序结束了
在用户可见界面按下电量键,执行结果:
onPause()
onStop()
跟使用home键效果一样,都是从用户可见状态到用户不可见,后天可见状态。
此时再解锁屏保,执行结果:
onRestart()
onStart()
onResume()
从后台到前台用户可见过程

执行截图 音量键+电量键,执行结果:
没有执行任何周期方法,说明截图没有对Activity产生影响。

那么横竖屏生命周期会怎么样呢?
1、不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,横竖屏都执行一次。

2、设置Activity的android:configChanges=”orientation”时,跟不设置一致,切屏还是会重新调用各个生命周期,横竖屏都执行一次

3、a. android:targetSdkVersion <= 12时,不会重新创建
b. android:targetSdkVersion > 12时,和不设置一样,重新创建。
c. 该点是网上获得的资料,没测试。在4.0以下的是不重建,而4.0以上的则为a,b所叙述。本测试机器为4.3。
设置Activity的android:configChanges=”orientation|keyboardHidden|screenSize”时,不重新创建Activity。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值