android横竖屏切换时候Activity的生命周期

2016-02-19 10:46 10 1 收藏

生活已是百般艰难,为何不努力一点。下面图老师就给大家分享android横竖屏切换时候Activity的生命周期,希望可以让热爱学习的朋友们体会到设计的小小的乐趣。

【 tulaoshi.com - 编程语言 】

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方法

总结一下整个Activity的生命周期
补充一点,当前Activity产生事件弹出Toast和AlertDialog的时候Activity的生命
周期不会有改变
Activity运行时按下HOME键(跟被完全覆盖是一样的):onSaveInstanceState --
onPause -- onStop onRestart --onStart---onResume
Activity未被完全覆盖只是失去焦点:onPause---onResume

来源:https://www.tulaoshi.com/n/20160219/1595725.html

延伸阅读
在开发android的应用中,有时候需要限制横竖屏切换。只需要在AndroidManifest.xml文件中加入android:screenOrientation属性限制。 ndroid:screenOrientation="landscape"是限制此页面横屏显示, ndroid:screenOrientation="portrait"是限制此页面数竖屏显示。 例如:我现在想让所有的页面不管怎么样都竖屏显示,则我的AndroidManifest.xml应该...
与人有生老病死一样,线程也同样要经历开始(等待)、运行、挂起和停止四种不同的状态。这四种状态都可以通过Thread类中的方法进行控制。下面给出了Thread类中和这四种状态相关的方法。 代码如下: // 开始线程      public void start( );      public void run( );      // ...
Java Annotations主要用来标注deprecated的代码。在这篇文章中,它们用来把方法调用的控制权移交给一个轻量级框架中负责处理一系列方法调用的组件。因此,正确的初始化和设置等操作被委派给客户端应用而不是类,以做到设置和控制都可以调整。 对于开发者来说,复杂的应用通常有很多初始化问题需要处理。许多不同的步骤无非是建立面板,配置服...
我们知道,POA规范定义CORBA对象为具有标识、接口和实现的抽象实体。从客户机的角度来看,对象表示为对象引用,对象引用封装了对象接口类型和标识,并包含足够的信息来定位对象的实现。但从服务器的角度来看又怎样呢? 1、伺服对象 POA规范引入了伺服对象(servant)的概念,使抽象的CORBA对象能和实现该对象功能的具体编程...
标签: Java JAVA基础
根据伺服对象的状态把它们进行分类后,现在基于内存管理来定义Corba对象的分类。显然,这个讨论和伺服对象的生命周期密切相关。这里侧重于分类,所以只是简单地讨论一下内存管理问题,并在下面引入一通用管理模式。 1. 静态Corba对象 静态对象是在系统整个生命时期中存在的Corba对象。通常,这些对象是组件入口点...

经验教程

397

收藏

20
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部