码迷,mamicode.com
首页 > 移动开发 > 详细

Android Activity生命周期的几个问题

时间:2017-03-10 11:14:32      阅读:259      评论:0      收藏:0      [点我收藏+]

标签:android   生命周期   activity   

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

 

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

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

  1. 技术分享

 

其实很简单,只要记住下面两点就行:

(1)      Activity的6个回调函数onCreate()– onStart() – onResume() – onPause() – onStop() – onDestroy()可以分成三组,里边的onResume()和onPause()表示Activity是否在前台获得焦点,onStart()和onStop()表示Activity是否可见,最外边的onCreate()和onDestroy()表示Activity是否存在。OnRestart()函数在Activity第一次启动时并不会被调用,当Activity从onStop()不可见状态重新回到可见状态时会先调用onRestart(),再调用onStart(),除了这7个回调函数外,还有一个函数很重要,就是onSaveInstanceState(), 常常用它来保存Actitity的一些状态变量。

(2)      Activity正常启动后,都会停在onResume()函数之后,想象一下,你打开Android手机的APP,正在看某个Activity上面显示的内容,如果这个Activity打印出了调试信息并且你能够看到,那么大概信息就会如下图所示

  • 技术分享

 

你看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的内容后面可以再讨论。

转载请注明出处 

欢迎大家评论


Android Activity生命周期的几个问题

标签:android   生命周期   activity   

原文地址:http://thewalker3000.blog.51cto.com/12469990/1904995

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!