`

Android 开发四大基本组件之一——Activity详解

 
阅读更多

一、Activty的生命周期图:


1.启动Activity:系统会先调用onCreate方法,然后调用onStart方法,最后调用onResume,Activity进入运行状态。

2.当前Activity被其他Activity覆盖其上或被锁屏:系统会调用onPause方法,暂停当前Activity的执行。

3.当前Activity由被覆盖状态回到前台或解锁屏:系统会调用onResume方法,再次进入运行状态。

4.当前Activity转到新的Activity界面或按Home键回到主屏,自身退居后台:系统会先调用onPause方法,然后调用onStop方法,进入停滞状态。

5.用户后退回到此Activity:系统会先调用onRestart方法,然后调用onStart方法,最后调用onResume方法,再次进入运行状态。

6.当前Activity处于被覆盖状态或者后台不可见状态,即第2步和第4步,系统内存不足,杀死当前Activity,而后用户退回当前Activity:再次调用onCreate方法、onStart方法、onResume方法,进入运行状态。

7.用户退出当前Activity:系统先调用onPause方法,然后调用onStop方法,最后调用onDestory方法,结束当前Activity。

 

一个Activity的启动顺序:

onCreate()——>onStart()——>onResume()

当另一个Activity启动时:

第一个Activity onPause()——>第二个Activity  onCreate()——>onStart()——>onResume() 

——>第一个Activity   onStop()

 

当返回到第一个Activity时:

第二个Activity onPause() ——> 第一个Activity onRestart()——>onStart()——>onResume() 

——>第二个Activity   onStop()——>onDestroy()

 

一个Activity的销毁顺序:

(情况一)onPause()——><Process Killed> 

(情况二)onPause()——>onStop()——><Process Killed> 

(情况三)onPause()——>onStop()——>onDestroy()

 

1、整个的生命周期,从onCreate(Bundle)开始到onDestroy()结束。Activity在onCreate()设置所有的“全局”状态,在onDestory()释放所有的资源。例如:某个Activity有一个在后台运行的线程,用于从网络下载数据,则该Activity可以在onCreate()中创建线程,在onDestory()中停止线程。

 

2、可见的生命周期,从onStart()开始到onStop()结束。在这段时间,可以看到Activity在屏幕上,尽管有可能不在前台,不能和用户交互。在这两个接口之间,需要保持显示给用户的UI数据和资源等,例如:可以在onStart中注册一个IntentReceiver来监听数据变化导致UI的变动,当不再需要显示时候,可以在onStop()中注销它。onStart(),onStop()都可以被多次调用,因为Activity随时可以在可见和隐藏之间转换。

 

3、前台的生命周期,从onResume()开始到onPause()结束。在这段时间里,该Activity处于所有 Activity的最前面,和用户进行交互。Activity可以经常性地在resumed和paused状态之间切换,例如:当设备准备休眠时,当一个 Activity处理结果被分发时,当一个新的Intent被分发时。所以在这些接口方法中的代码应该属于非常轻量级的。

 

 

当avtivity处于活跃状态时如下操作时会执行这些函数

1.弹出对话框样式的Activity时或半透时:onSaveInstanceState()-->onpause()

2.跳转Activity时:onSaveInstanceState()-->onPause()-->onStop()

3.按下home键时:onSaveInstanceState()-->onPause()-->onStop()

4.按下返回键时:onPause()-->onStop()-->onDestroy()

 

5.竖切横屏时:onSaveInstanceState-->onPause()-->onStop()-->onDestroy()--|-->onCreate()--onStart()-->onRestoreInstanceState()-->onResume()

 

6.横切竖屏时:onSaveInstanceState-->onPause()-->onStop()-->onDestroy()--|-->onCreate()--onStart()-->onRestoreInstanceState()-->onResume()-->onSaveInstanceState-->onPause()-->onStop()-->onDestroy()--|-->onCreate()--onStart()-->onRestoreInstanceState()-->onResume()

 

当设置Android:configChanges="orientation" 竖-->横,执行一次且不执行执行onConfigurationChanged

横-->竖,执行一次且执行onConfigurationChanged一次

当设置android:configChanges="orientation|keyboardHidden"竖-->横,只执行onConfigurationChanged

横-->竖,只执行onConfigurationChanged两次。

 

其onSaveInstanceState方法会在什么时候被执行,有这么几种情况: 

1、当用户按下HOME键时。 这是显而易见的,系统不知道你按下HOME后要运行多少其他的程序,自然也不知道activity A是否会被销毁,故系统会调用onSaveInstanceState,让用户有机会保存某些非永久性的数据。以下几种情况的分析都遵循该原则 

2、长按HOME键,选择运行其他的程序时。 

3、按下电源按键(关闭屏幕显示)时。 

4、从activity A中启动一个新的activity时。 

5、屏幕方向切换时,例如从竖屏切换到横屏时。 在屏幕切换之前,系统会销毁activity A,在屏幕切换之后系统又会自动地创建activity A,所以onSaveInstanceState一定会被执行   总而言之,onSaveInstanceState的调用遵循一个重要原则,即当系统“未经你许可”时销毁了你的activity,则 onSaveInstanceState会被系统调用,这是系统的责任,因为它必须要提供一个机会让你保存你的数据(当然你不保存那就随便你了)。   

至于onRestoreInstanceState方法,需要注意的是,onSaveInstanceState方法和onRestoreInstanceState方法“不一定”是成对的被调用的,(本人注:我昨晚调试时就发现原来不一定成对被调用的!)

 

onRestoreInstanceState的执行是在activity确实被销毁时。再恢复时

 

1、新建一个Activity,并把各个生命周期打印出来

 

2、运行Activity,得到如下信息

 

onCreate-->

onStart-->

onResume-->

 

3、按crtl+f12切换成横屏时

 

onSaveInstanceState-->

onPause-->

onStop-->

onDestroy-->

onCreate-->

onStart-->

onRestoreInstanceState-->

onResume-->

 

4、再按crtl+f12切换成竖屏时,发现打印了两次相同的log

 

onSaveInstanceState-->

onPause-->

onStop-->

onDestroy-->

onCreate-->

onStart-->

onRestoreInstanceState-->

onResume-->

onSaveInstanceState-->

onPause-->

onStop-->

onDestroy-->

onCreate-->

onStart-->

onRestoreInstanceState-->

onResume-->

 

5、修改AndroidManifest.xml,把该Activity添加 android:configChanges="orientation",执行步骤3

 

onSaveInstanceState-->

onPause-->

onStop-->

onDestroy-->

onCreate-->

onStart-->

onRestoreInstanceState-->

onResume-->

 

6、再执行步骤4,发现不会再打印相同信息,但多打印了一行onConfigChanged

 

onSaveInstanceState-->

onPause-->

onStop-->

onDestroy-->

onCreate-->

onStart-->

onRestoreInstanceState-->

onResume-->

onConfigurationChanged-->

 

7、把步骤5的android:configChanges="orientation" 改成 android:configChanges="orientation|keyboardHidden",执行步骤3,就只打印onConfigChanged

 

onConfigurationChanged-->

 

8、执行步骤4

 

onConfigurationChanged-->

onConfigurationChanged-->

 

 总结:

 

1、不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次

 

2、设置Activity的android:configChanges="orientation"时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次

 

3、设置Activity的android:configChanges="orientation|keyboardHidden"时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法

  • 大小: 64.6 KB
分享到:
评论

相关推荐

    Android应用开发详解-附源码

    书中还会深入讲解Android的四大组件之一——Intent的概念和使用,Intent是Android系统中实现组件间通信的关键。通过Intent,我们可以启动Activity、Service,或者传递数据。另外,权限管理也是Android应用开发中的...

    Android从入门到放弃—— 一、Activity详解1

    Activity作为Andorid的四大组件之一,为用户提供了一个界面,即我们能看到的界面。相当于一张画画用的纸,我们可以在上面画任何我们想要的内容。 Activity的创建: 就像我们画画需要拿一张画纸铺在画板上一样,想要...

    android四大组件PPT学习教案.pptx

    《Android四大组件——Activity详解》 在Android应用开发中,Activity是构成应用程序核心的四大组件之一,它扮演着用户交互界面的重要角色。Activity提供了一个窗口,用户可以通过它与应用程序进行互动,例如打电话...

    Android应用开发详解

    接着,深入探讨Android应用的四大组件——Activity、Service、BroadcastReceiver和ContentProvider。Activity是用户界面的主要载体,理解其生命周期和如何进行界面跳转是关键;Service在后台运行,用于执行长时间...

    Android学习之路——7.Service

    在Android应用开发中,Service是四大组件之一,它在后台执行长时间运行的操作,不与用户交互。本篇文章将深入探讨“Android学习之路——7.Service”,分析Service的基本概念、使用方式以及常见应用场景,同时结合...

    android开发入门资料

    10大话企业级Android开发_组件(上).pdf介绍了Android的四大组件——Activity、Service、BroadcastReceiver和ContentProvider。这四个组件是Android应用的基础,理解它们的功能和交互方式是掌握Android开发的关键。...

    Android——Android lint工具项目资源清理详解

    8. **废弃的四大组件(MissingRegistered)** 检查`AndroidManifest.xml`中是否还有未使用的Activity、Service、BroadcastReceiver或ContentProvider。这些废弃的组件应该被移除,以避免不必要的资源消耗。 9. **...

    实验五 Android组件应用

    1. **了解Activity的编程原理**:理解Activity作为Android四大组件之一的核心作用。 2. **掌握Activity之间的参数传递**:学习如何利用Intent和Bundle在不同Activity之间传递数据。 3. **掌握Activity生命周期的7个...

    安卓Android源码——系统原理与开 发要点详解_培训课件.zip

    在"安卓Android源码——系统原理与开发要点详解_培训课件"中,你将详细了解到上述各个方面的内容,这对于提升你的Android开发技能和理解系统底层运作至关重要。通过对源码的学习,开发者不仅能解决实际问题,还能更...

    安卓Android源码——系统原理与开 发要点详解_培训课件.rar

    《安卓Android源码——系统原理与开发要点详解》是一份深度剖析Android操作系统的培训资料,旨在帮助开发者深入了解Android系统的内部工作原理以及优化开发流程。这份资料涵盖了从Android系统的架构到具体开发实践的...

    Android学习总结-Intent详解.doc

    Intent在Android开发中扮演着至关重要的角色,它是四大组件(Activity、Service、BroadcastReceiver和ContentProvider)间通信的关键。Intent不仅用于应用间的交互,也可以在同一个应用内的不同组件之间传递信息。...

    Android入门到精通详解(完整书签)

    3. **基本组件**:讲解四大组件——Activity(活动)、Service(服务)、BroadcastReceiver(广播接收器)和ContentProvider(内容提供者)的用法和生命周期管理。 4. **UI设计**:介绍XML布局文件的编写,使用各种...

    Android系统原理及开发要点详解04

    Android四大组件——Activity、Service、BroadcastReceiver和ContentProvider是系统的核心。开发者需要理解它们之间的通信方式,如Intent用于启动Activity或Service,BroadcastReceiver监听全局事件,...

    手机阅读“宝”——Apabi Reader for Android

    在深入研究Apabi Reader之前,开发者需要具备一定的Android开发基础知识,包括Java或Kotlin编程语言、Android SDK、Android Studio的使用,以及对Android四大组件(Activity、Service、BroadcastReceiver、...

    Android开发提高

    Activity是Android应用程序的四大组件之一,代表了一个屏幕上的“窗口”,用户可以在其中进行交互。Intent则是Activity间通信的桥梁,它可以启动新的Activity、传递数据以及执行服务等。理解并熟练掌握Activity与...

    Android宝典(第二版)

    通过了解和掌握Android四大组件——Activity、Service、Content Provider 和 BroadcastReceiver,开发者能够构建出功能强大、性能优异的Android应用。每个组件都有其独特的用途和应用场景,合理利用这些组件可以帮助...

    腾讯Android社招面试源码相关11题+原理详解.zip

    Android的四大组件——Activity、Service、BroadcastReceiver和ContentProvider,是构建应用程序的基础。Activity代表用户界面,Service在后台运行,BroadcastReceiver用于接收广播事件,ContentProvider处理数据...

    Android版俄罗斯方块

    在Android平台上实现这一游戏,需要深入理解Android系统的四大组件——Activity、Service、BroadcastReceiver和ContentProvider,并结合第三方服务如bmob的后台服务器。本文将详细解析这些知识点在构建Android版...

    android 贪吃蛇

    同时,理解Android的四大组件——Activity(活动)、Service(服务)、BroadcastReceiver(广播接收器)和ContentProvider(内容提供者)的概念及用法也是必要的。 二、用户界面设计 贪吃蛇的游戏界面主要包括游戏...

    基于android环境的俄罗斯方块大学生大学论文.doc

    在Android开发中,四大核心组件——Activity、Service、Content Provider和BroadcastReceiver是构建应用的基础。Activity作为应用程序的单一视图,负责显示用户界面并处理交互;Service则是在后台运行的无界面组件,...

Global site tag (gtag.js) - Google Analytics