活动的生命周期

2020-02-27  本文已影响0人  今天也要努力呀y
未命名文件.png

Android使用任务栈来管理活动,
1.活动状态
运行状态:一个活动位于返回栈的栈顶,活动就处于运行状态
暂停状态:不再处于栈顶位置,但任然可见时
停止状态:不再处于栈顶位置,完全不可见
销毁状态:从返回栈中移除

onCreate() 活动第一次被创建的时候调用,完成活动的初始化操作
onStart()活动由不可见到可见的时候
onResume() 活动准备好和用户交互的时候调用,此时活动处于返回栈的栈顶,并且处于运行状态
onPause() 系统准备去启动或者恢复一个活动时候调用
onStop()在活动完全不可见的时候调用,它与onPause的区别是,如果被调用的是个对话框式的活动,onpause会被执行,而onStop不会执行
onDestroy是在活动被销毁之前,之后活动的转态变为销毁状态
onRestart由停止状态到运行状态

完整生存期:onCreate到onDestroy
可见生存期:onStart到onStop
前台生存期:onResume到onPause

举个例子:
这里的normal是普通活动
dialog是主题为@style/Theme.AppCompat.Dialog的对话框活动

normal.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this,NormalActivity.class);
                startActivity(intent);
            }
        });
        dialog.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this,DialogActivity.class);
                startActivity(intent);
            }
        });
@Override
    protected void onStart() {
        super.onStart();
        Log.e(TAG, "onStart: " );
    }

    @Override
    protected void onResume() {
        super.onResume();
        Log.e(TAG, "onResume: " );
    }

    @Override
    protected void onPause() {
        super.onPause();
        Log.e(TAG, "onPause: " );
    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.e(TAG, "onStop: " );
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.e(TAG, "onDestroy: " );
    }

    @Override
    protected void onRestart() {
        super.onRestart();
        Log.e(TAG, "onRestart: " );
    }

运行结果:
刚进入界面时


image.png

点击normal按钮时


image.png

返回时


image.png

点击dialog按钮时


image.png

点击返回


image.png
再返回
image.png

2.切换横竖屏时的Activity生命周期

当不设置android:configChanges
1.切横屏时:
onSavedInstanceState()->onPause()->onStop()->onDestroy()->onCreate()->onStart()->onRestoreInstance()->onResume();
2.切竖屏时:执行2次
onSavedInstanceState()->onPause()->onStop()->onDestroy()->onCreate()->onStart()
->onRestoreInstance()->onResume();

设置android:configChanges="orientation"
切横竖屏只会执行一次

切换横竖屏时,想保留页面数据,可以通过重写onSavedInstanceState()实现
想恢复数据:通过重写onRestoreInstanceState()方法

上一篇 下一篇

猜你喜欢

热点阅读