• Activity生命周期


    利用记事本来巧记activity生命周期7个方法:
    onCreate():创建时调用(记事本被打开)
    onStart():用户可见时调用(记事本非最小化)
    onRestart():用户重新可见时调用(记事本恢复)
    onResume():开始和用户交互时调用(记事本获得焦点)
    onPause():结束与用户交互时调用(记事本失去焦点)
    onStop():用户不可见时调用(记事本最小化)
    onDestroy():销毁时调用(记事本被关闭)

    生命周期的作用:
    ①当用户接一个电话或切换到另一个程序不会崩溃
    ②当用户后台运行程序时不会销毁有价值的系统资源
    ③当用户离开再返回你的应用时不会丢失用户的进程
    ④当手机屏幕进行横竖屏切换的时候不会崩溃或者丢掉用户的进程

    1.当程序启动之后,第一个Activity经过的生命周期方法是:
    onCreate() →onStart() → onResume()方法

    2.当第一个Activity A启动第二个Activity B的时候
    (备注:第二个Activity完全遮盖住第一个Activity,并且这个过程中没有出现点击Home键,或者第一个Activity被杀死等异常情况,并且两个Activity的启动模式是标准模式),这两个Activity经历的生命周期方法是:
    A onPause() → B onCreate() → B onStart() → B onResume() → A onStop() →
    (此时Activity A已经在回退栈的最低端, Activity B已经在Activity A的上面,在回退栈的最顶端)

    3.当通过点击后退键退出Activity B的时候:(此时Activity B 弹出回退栈)
    → B onPause() → A onRestart() → A onStart() → A onResume() → B onStop() → B onDestroy() 此时B被销毁

    如果后台的Activity由于某原因被系统回收了,如何在被系统回收之前保存当前状态?
    当你的程序中某一个Activity A 在运行时中,主动或被动地运行另一个新的Activity B
    这个时候A会执行Java代码

    public void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    outState.putLong("id", 1234567890);
    }

    B 完成以后又会来找A, 这个时候就有两种情况,一种是A被回收,一种是没有被回收,被回收的A就要重新调用onCreate()方法,不同于直接启动的是这回onCreate()里是带上参数savedInstanceState,没被收回的就还是onResume就好了。
    savedInstanceState是一个Bundle对象,你基本上可以把他理解为系统帮你维护的一个Map对象。在onCreate()里你可能会 用到它,如果正常启动onCreate就不会有它,所以用的时候要判断一下是否为空。
    Java代码

    if(savedInstanceState != null){ 
    long id = savedInstanceState.getLong("id"); 
    }

    就像官方的Notepad教程 里的情况,你正在编辑某一个note,突然被中断,那么就把这个note的id记住,再起来的时候就可以根据这个id去把那个note取出来,程序就完整 一些。这也是看你的应用需不需要保存什么,比如你的界面就是读取一个列表,那就不需要特殊记住什么,哦, 没准你需要记住滚动条的位置

    横竖屏切换时候activity的生命周期
    1.不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次.
    2.设置Activity的android:configChanges="orientation"时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次.
    3.设置Activity的android:configChanges="orientation|keyboardHidden"时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法.
    activity对一些资源以及状态的操作保存,最好是保存在生命周期的onStart()函数中进行

  • 相关阅读:
    PHP curl_share_init函数
    使用脚本管理mongodb服务
    多项式全家桶
    Resharper 如何把类里的类移动到其他文件
    Resharper 如何把类里的类移动到其他文件
    win10 17025 触摸bug
    win10 17025 触摸bug
    VisualStudio 自定义外部命令
    VisualStudio 自定义外部命令
    C# Find vs FirstOrDefault
  • 原文地址:https://www.cnblogs.com/anni-qianqian/p/5293019.html
Copyright © 2020-2023  润新知