AndroidActivity生命周期的几个问题

每一个Android开发者都应该知道,android系统有四个重要的基本组件,即Activity(活动)、Service(服务)、Broadcast Receive(广播接收器)和Content Provider(内容提供器),其中,Activity是最重要的组件,打开你手机上的APP,你眼睛所能看到的都是Activity,下面将会介绍关于Activity生命周期的几个问题。

创新互联公司是一家专注于成都网站设计、网站制作与策划设计,湖北网站建设哪家好?创新互联公司做网站,专注于网站建设10余年,网设计领域的专业建站公司;建站业务涵盖:湖北等地区。湖北做网站价格咨询:13518219792

 

1 Activity生命周期的8个回调函数

下图是Activity的生命周期图,相信许多人都看过不止一次,但有的人是看到这张图时明白,过一段时间就记不清或者忘了,怎么才能完全理解并掌握呢?

  1. Android Activity生命周期的几个问题

  2.  

    你看Activity上面的内容时,Activity就会停在onResume函数之后。

     

    2 Activity几个重要回调函数的说明

             上面提到的Activity的8个回调函数,究竟哪些最重要呢?

              onCreate()肯定是最重要的,IDE都会默认生成onCreate()函数,它会在Activity第一次被创建时调用,在onCreate()函数中会加载布局,初始化视图,绑定事件和其他的各种初始化操作,一个Activity的其他几个回调函数都有可能不被调用,但onCreate()一定会被调用,因为onCreate()里面往往内容很多,所以不要把所有代码都写到一起,这样不便于维护,而应该分成各种子函数,类似下面的方式:

     

    protected voidonCreate(Bundle savedInstanceState) {
           super.onCreate(savedInstanceState);
           setContentView(R.layout.activity);
                      f1();
                      f2();
                      f3();
                      ...
    }

    onPause()是离开Activity时调用的第一个方法,你在onPause()里应该保存一些重要数据,释放系统资源,因为只有onPause()_执行完后,下一个Activity才能正常运行,所以onPause()不能执行耗时操作。

    onSaveInstanceState()常常被用作保存Activity临时的状态信息,在系统配置信息发生变化或者内存低导致重建Activity时,这个函数非常有用。比如我们在EditText输入的信息,在屏幕发生旋转时,信息就会丢失,这种情况,我们可以在onSaveInstanceState()保存用户输入的数据,然后在onCreate()或onRestoreInstanceState()进行恢复,后者更加方便一些,因为不需要进行Null值判断。

    3 其他小问题

    (1)      关于super.onCreate(savedInstanceState)

    你会发现,每一个回调函数都会首先调用父类的回调函数,super.onX(),这个是必须的,如果不调用父类的回调函数,运行时应用会崩溃。

    (2)      为什么没有看到Activity的构造函数

            其实,你可以写Activity的构造函数,无参数的构造函数确实会在onCreate()之前执行,但构造函数实际上作用不大,系统会在Activity构造函数执行后创建上下文环境,然后再调用onCreate()函数,所有的初始化操作都应该放在onCreate()中。

        (3) 什么时候只会调用onPause()而不会调用onStop()

                       onPause()表示Activity失去焦点,onStop()表示不可见,所以必须是Activity失去焦点但部分可见才能只调用onPause而不调用onStop(), 但并不是所有的失去焦点并部分可见就会调用onPause(), 如当前Activity产生的对话框,系统的关机对话框,音量对话框,都使当前Activity失去焦点,但都不会调用onPause()函数。

              怎样才能调用onPause()而不调用onStop呢?可以新建两个Activity,用Activity1启动Activtiy2,把Activity2的主题设为

    android:theme="@style/Theme.AppCompat.Dialog"

    你就发现Activity1只会调用onPause()而不会调用onStop。

    当你在Activity打开某个网址是,系统会弹出对话框,会有几个应用让你选泽,如UC浏览器或QQ浏览器等,此时,就只会调用onPause(),还没有调用onStop()。具体方法大家可以自己实验测试。

    以上是Activity生命周期的几个问题,其他关于Activity的内容后面可以再讨论。

    转载请注明出处 

    欢迎大家评论


    本文标题:AndroidActivity生命周期的几个问题
    路径分享:http://azwzsj.com/article/jddieh.html