美文网首页
Activity生命周期及方法

Activity生命周期及方法

作者: 红茶炒饭 | 来源:发表于2019-02-18 19:33 被阅读0次
    当单独一个Activity启动时,任何启动模式~

    onCreate()

    在Activity创建时调用,通常做一些初始化设置。
    这个方法只会被调用一次

    setContentView()
    为Activity设置所要使用的布局文件

    onContentChanged()
    在setContentView()执行完成之后回调

    onStart()

    当Activity可见未获得用户焦点不能交互时系统会调用

    onPostCreate()
    Activity彻底运行起来之后的回调 - 通常用不到

    onResume()

    当Activity可见且获得用户焦点能交互时系统会调用

    onPostResume()
    activity真正获取焦点之后回调,此方法在onResume()方法之后 - 通常用不到

    onAttachedToWindow()
    在第一次调用onDraw前调用的,也就是我们写的View在没有绘制出来时调用的,但只会调用一次。

    onCreateOptionsMenu();
    onPrepareOptionsMenu();
    onOptionsItemSelected();
    onMenuOpened();
    onOptionsMenuClosed();

    与toolBar右侧的菜单相关的方法

    onRestart()

    当Activity已经停止然后重新被启动时系统会调用

    onPause()

    在当前Activity被其他Activity覆盖或锁屏时调用

    onStop()

    在Activity对用户不可见时调用

    onDestroy()

    在Activity销毁时调用

    onDetachedFromWindow()
    销毁View的时候,这个View不再显示,这个时候我们就可以在这个方法做一些收尾工作,如:取消广播注册,子线程等

    onCreate和onStart之间有什么区别?
    可见与不可见的区别。前者不可见,后者可见。
    onCreate方法只在Activity创建时执行一次,而onStart方法在Activity中被多次调用。onCreate能做的事onStart其实都能做,但是onstart能做的事onCreate却未必适合做。如前文所说的,setContentView和资源初始化在两者都能做,然而想动画的初始化在onStart中做比较好。

    onStart方法和onResume方法有什么区别?
    是否在前台。onStart方法中Activity可见但不在前台,不可交互,而在onResume中在前台。
    职责不同,onStart方法中主要还是进行初始化工作,而onResume方法,根据官方的建议,可以做开启动画和独占设备的操作。

    onPause方法和onStop方法有什么区别?
    是否可见。onPause时Activity可见,onStop时Activity不可见,但Activity对象还在内存中。
    在系统内存不足的时候可能不会执行onStop方法,因此程序状态的保存、独占设备和动画的关闭、以及一些数据的保存最好在onPause中进行,但要注意不能太耗时。

    额外的方法

    //获取Launcher第一帧
    @Override
        public void onWindowFocusChanged(boolean hasFocus) {
            super.onWindowFocusChanged(hasFocus);
        }
    

    onNewIntent()
    当一个Activity被重新启动时候,如果该Activity没有被重新创建,那么就会调用此方法

    onLowMemory()
    onTrimMemory()

    当系统内存不够的时候会调用,我们可以在这两个方法中手动释放资源

    startActivForResult()
    当新Activity关闭后,新Activity返回的数据通过Intent进行传递,android平台会调用前面Activity 的onActivityResult()方法,把存放了返回数据的Intent作为第三个输入参数传入,在onActivityResult()方法中使用第三个输入参数可以取出新Activity返回的数据。

    跳转standard

    假设A跳B
    B的启动模式是standard

    A onPause()
    B onCreate()--onResume()
    A onStop()

    B返回到A

    B onPause()
    A onRestart()--onResume()
    B onStop()---onDestory()

    结论:
    先将原来的Activity暂停(onPause),然后将将要展示的Activity获取焦点,最后将原Activity隐藏获销毁

    跳转singleTop

    假设A跳B
    B的启动模式是singleTop

    B已经在栈顶
    B onPause()--onNewIntent()--onResume()
    B不在栈顶
    B 创建新的Activity

    跳转singleTask

    假设A跳B
    B的启动模式是singleTask

    B已经在栈顶
    B onPause()--onNewIntent()--onResume()
    B不在栈顶
    先销毁中间所有的Activity--顶层onPause()--B onNewIntent()--onRestart()-- onStart()--onResume()--顶层Activity销毁

    Acticvity的启动模式会影响结果

    startActivForResult--onActivityResult()--onRestart()

    横竖屏切换

    在不同的真机上 onStop() 和 onSaveInstanceState() 的执行顺序会有差别

    onPause()

    onStop()

    onSaveInstanceState()
    当某个activity变得"容易"被系统销毁时,该activity的onSaveInstanceState()就会被执行,除非该activity是被用户主动销毁的,例如当用户按BACK键的候。 如果我们需要覆写onSaveInstanceState()方法, 一般会在第一行代码中调用该方法的默认实现:super.onSaveInstanceState(outState)。与此同时,当我们需要保存额外的数据时, 就需要覆写onSaveInstanceState()方法。

    onDestroy()

    onCreate()

    onStart()

    onRestoreInstanceState()
    取出我们在onSaveInstanceState()中所保存的值 我们的onCreate()中super.onCreate(savedInstanceState);
    这个savedInystanceState对象也可以取出值

    onResume()

    相关文章

      网友评论

          本文标题:Activity生命周期及方法

          本文链接:https://www.haomeiwen.com/subject/haszeqtx.html