zoukankan      html  css  js  c++  java
  • activity--生命周期总结

    22.Android禁止屏幕旋转 & 旋转屏幕时保持Act内容?

    21.旋转屏幕Act执行的生命周期方法?

    12.ActA与 ActB互相跳转生命周期情况?

    11.Activity几种情况生命周期?

    ============

    22.Android禁止屏幕旋转 & 旋转屏幕时保持Activity内容?

    对android:configChanges属性,一般认为有以下几点:
    1、不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次

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

    3、设置Activity的android:configChanges="orientation|keyboardHidden"时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法

    但是,自从Android 3.2(API 13),
    在设置Activity的android:configChanges="orientation|keyboardHidden"
    后,还是一样会重新调用各个生命周期的。因为screen size也开始跟着设备的横竖切换而改变。
    所以,在AndroidManifest.xml里设置的MiniSdkVersion和 TargetSdkVersion属性大于等于13的情况下,
    如果你想阻止程序在运行时重新加载Activity,除了设置"orientation",你还必须设置"ScreenSize"。
    解决方法:
    AndroidManifest.xml中设置android:configChanges="orientation|screenSize“

    (2)在manifest.xml文件设置android:configChanges="orientation|keyboardHidden|screenSize"切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法。
    需注意的是,在4.0以后的版本需要加上ScreenSize, 不然不会执行onConfigurationChanged方法.
    执行顺序:
    onCreate
    onStart
    onResume
    onConfigurationChanged();

    1.在应用中固定屏幕方向。
    在AndroidManifest.xml的activity中加入:android:screenOrientation=”landscape”属性即可(landscape是横向,portrait是纵向)。


    2.随屏幕旋转时,不重新调用onCreate。
    当将手机屏幕旋转时,系统会被强制重置启动onCreate方法。
    1)修改AndroidManifest.xml。
    在activity属性中加入:android:configChanges=”orientation|keyboardHidden| screenSize”
    android:configChanges,这个方法主要是负责列出清单,当清单上用户指定的设置改变时,Activity会自己处理这些变化。
    orientation,屏幕界面旋转(可能是用户手动旋转的),
    【注意:如果你的开发API等级等于或高于13,你还需要设置screenSize,因为screenSize会在屏幕旋转时改变】
    keyboardHidden,键盘辅助功能改变;

    2)在相对应的Activity中继承重写onConfigurationChanged方法,这个方法将会在我们的应用发生变化时,让我们能随心所谓地进行监听处理。
    public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    if (newConfig.orientation==Configuration.ORIENTATION_LANDSCAPE) {
    // Nothing need to be done here
    } else {
    // Nothing need to be done here
    }
    }
    如果在两个if中写其他操作,比如setContentView(),那么当旋转屏幕时,就会重新调用新的view,并且需要重新设定view的内容,而当前的view内容没有保存。什么也不写的话,当前view中的内容会随着屏幕转动而转动,不影响操作,这是我想要的结果。


    21.旋转屏幕Activity执行的生命周期方法?

    很多时候会用到屏幕旋转时需要对一些数据进行保存,例如当横竖屏区切换时要保存先前屏幕的一些数据和状态,那么在旋转屏幕的时候都会调用activity生命周期的哪些方法呢,运行得出了如下结果:
    (1)如果销毁当前的Activity,那么就要重写Activity的两个方法
    onSaveInstanceState()保存数据 和 onRestoreInstanceState()还原数据
    执行顺序:
    onCreate();
    onStart();
    onResume()
    onPause
    onSaveInstanceState
    onStop
    onDestroy

    onCreate
    onStart
    onRestoreInstanceState
    onResume

    在灭屏时调用的方法
    onPause
    onSaveInstanceState
    onStop

    屏幕重新唤醒时调用的方法:
    onRestart
    onStart
    onResume

    退出程序时调用的方法:
    onPause
    onStop
    onDestroy 

    12.两个Activity之间跳转时必然会执行的是哪几个方法?
    一般情况下比如说有两个activity,分别叫A,B。
    当在A 里面激活B 组件的时候, A会调用onPause()方法,然后B调用onCreate() ,onStart(), onResume()。
    如果这个时候B覆盖了A的窗体, A会调用onStop()方法。
    如果B是个透明的窗口,或者是对话框的样式, 就不会调用A的onStop()方法。
    如果B已经存在于Activity栈中,B就不会调用onCreate()方法。

    11.Activity的几种情况的生命周期?

     11.打开APP,进入ActivityA?

    ActA --onCreate();
    ActA --onStart();
    ActA --onResume();

    12.ActivityA跳转到ActivityB
    ActA: onPause();
    ActB: onCreate();
    ActB: onStart();
    ActB: onResume();
    ActA: onStop();

    13.ActivityB按back键返回?
    ActB: onPause();
    ActA: onRestart();
    ActA: onStart();
    ActA: onResume();
    ActB: onStop();
    ActB: onDestroy();


    14.ActivityA按back键返回
    ActA: onPause();
    ActA: onStop();
    ActA: onDestroy();

  • 相关阅读:
    Async和Await的用法
    Idea有关收藏的博客
    记录看到的写的好的、实用的JavaScript博客
    Linux实用指令一
    flex布局
    移动端开发常用的vue组件
    npm --save 的含义
    切换npm源为淘宝镜像
    java String Map List 转换
    mysql查看被锁住的表
  • 原文地址:https://www.cnblogs.com/awkflf11/p/9196115.html
Copyright © 2011-2022 走看看