美文网首页
Activity生命周期

Activity生命周期

作者: LingoGuo | 来源:发表于2018-10-08 20:35 被阅读11次

    Activity简介

    Activity是一种可以包含用户界面的组件,主要用于和用户进行交互,属于Android四大组件之一。

    Activity生命周期

    先上一张图:

    屏幕快照 2017-09-08 上午11.18.17.png

    onCreate(Bundle savedInstanceState):创建Activity时调用

    onStart():Activity由不显示变为显示时调用,但实际用户还看不到

    onResume():Activity在前台,可以和用户交互时调用

    onPause():当Activity被部分遮住时这个方法会被调用,正常情况下紧接着onStop()会被调用,如果重新回到前台,那么onResume()会被调用

    onStop():Activity在完全不可见时调用,如果重新回到前台,那么onRestart()、onStart()、onResume()会被相继调用

    onRestart():Activity从完全不可见的状态重新启动时调用

    onDestroy():Activity销毁之前调用

    补充说明:

    • onSaveInstanceState(Bundle)用来保存当前Activity的状态,任玉刚在《Android开发艺术探索》提到,系统只会在Activity即将被销毁并且有机会重新显示的情况下才会调用它,例如横竖屏状态的切换会引起Activity实例的销毁和重建,这种情况下因为Activity即将销毁且会重新创建实例显示,所以会调用onSaveInstanceState。
    • onRestoreInstance(Bundle)则用来恢复存储的数据,参数是Activity销毁前onSaveInstanceState方法所保存的Bundle对象,一般异常情况下,例如横竖屏切换、Activity由于内存不足被杀死则会调用,正常情况下存储的数据可以通过onCreate(Bundle)的参数Bundle来恢复。

    各种情况Activity的生命周期:
    以下情况代码中均没有重写onSaveInstanceState和onRestoreInstanceState

    1. 点击应用进入主Activity界面,该Activity的onCreate、onStart、onResume相继会被调用;
    2. 点击应用进入主Activity界面,熄屏,该Activity的onPause、onSaveInstanceState、onStop相继被调用,再次亮屏,onRestart、onStart、onResume相继调用
    3. 点击应用进入主Activity界面,按Home键或者全面屏手势返回桌面,此时onPause、onSaveInstanceState、onStop相继被调用,再次回到应用主Activity界面,onCreate、onStart、onResume相继调用
    4. 假设某个Button点击后会跳转到新的Activity,那么此时主Activity的onPause会被调用,然后接着新的Activity的onCreate、onStart、onResume相继被调用,接着是主Acitivity的onSaveInstanceState、onStop相继被调用,返回主Activity,主Activity的onRestart、onStart、onResume相继被调用,除非主Activity由于内存不足已被系统杀死
    5. 通过Back键或者全面屏返回手势退出主Activity界面,主Activity的onPause、onStop、onDestroy相继被调用,再次进入主Activity的onCreate、onStart、onResume相继调用
    6. 点击应用进入主Activity界面,将设刚进入是竖屏状态,接着将手机横屏,那么该Activity的onPause、onSaveInstanceState、onStop、onDestroy、onCreate、onStart、onRestoreInstanceState、onResume将被相继调用,假设主Activity界面有一个EditView,在竖屏状态下输入“哈哈”,接着横屏,发现“哈哈”依然还在

    补充说明:

    • 从最后一点的情况来看,在onSaveInstanceState和onRestoreInstanceState中系统会自动为我们做一定的数据存储和恢复工作,否则横竖屏切换,用户输入的“哈哈”不应该还在,因为代码并没有重写onSaveInstanceState和onRestoreInstanceState。
    • 从第4点来看,不可在onPause做太多工作,因为新的Acitivity要等旧的Activity的onPause调用完才会创建。
    • 关于onSaveInstanceState和onPause、onStop的调用次序,任玉刚在《Android开发艺术探索》这本书提高,onSaveInstanceState会在onStop之前调用,但与onPause的次序不定,而onRestoreInstanceState会在onStart之后调用。
    • 如果从主Activity跳转到其他Activity,而此时由于内存不足,主Activity被杀死,那么点击Back键返回主Activity时主Activity会被重新创建,任玉刚在《Android开发艺术探索》提到情况其数据存储和恢复过程和横竖屏切换一样。

    相关文章

      网友评论

          本文标题:Activity生命周期

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