背景

这段时间总算是忙完了毕业设计,现在就等整理毕业材料和坐等拿毕业证书了,趁现在还在学校里,赶忙复习一下基础知识,为了毕业能够顺利找到工作。

Activity

Activity是Android组件中最基本也是最常用的四大组件之一

在一个Android应用中,一个Activity通常就是一个单独的屏幕,通过setContentView(View)来显示指定控件,用户可以通过某些控件来进行交互,Activity之间通过Intent进行通信。

生命周期的五大状态
  • 启动状态:Activity的启动状态很短暂,当Activity启动后便进入了运行状态。
  • 运行状态:Activity在此状态时处于屏幕最前端,这时它是可见的、有焦点的,用户可以进行交互,即使出现了内存不足的情况,Android也会先销毁栈底的Activity来确保当前的Activity正常运行。
  • 暂停状态:在某些情况下,Activity对用户来说仍然可见,但是无法获取焦点,用户对他操作也没有响应。
  • 暂停状态:当Activity完全不可见时,但是此时仍然保留着当前的状态和信息。如果系统内存不足,那么这种状态下的Activity很容易被销毁。
  • 销毁状态:当Activity处于销毁状态时,将被清理出内存。

生命周期流程在这儿就不写了,之前复习的时候就已经写过一次了,现在再看一遍。

不过这张图我觉得很有必要在这里出现。

常见生命周期调用方式

具体场景生命周期调用方式
1,横竖屏切换对Activity生命周期的影响

横竖屏切换涉及到的是Activity的android:configChanges属性

android:configChanges可以设置的属性只有

  • orientation:消除横竖屏的影响
  • keyboardHidden:消除键盘的影响。
  • screenSize:消除屏幕大小的影响。
第一种情况:
  • android:configChanges = orientation
  • android:configChanges = orientation|keyboardHidden
  • 不设置android:configChanges

横竖屏切换Activity生命周期变化:

onPause->onSaveInstanceState->onStop->onDestroy->onCreate->onStart->onRestoreInstanceState->onResume

在进行横竖屏切换时在调用onStop之前会调用onSaveInstanceState来进行Activity的状态保存,在后面重新显示Activity的onResume方法之前会调用onRestoreInstanceState来恢复之前由onSaveInstanceState保存的Activity信息。

第二种情况:
  • android:configChanges = orientation|screenSize
  • android:configChanges = orientation|screenSize|keyboardHidden

在上述两种属性设置下,横竖屏切换不会重新加载Activity的各个生命周期。

第三种情况:
  • android:screenOrientation = “portrait” //始终以竖屏显示
  • android:screenOrientaition = “landscape” //始终以横屏显示
  • Activity.this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT) //以竖屏显示
  • Activity.this.setRequestedOrientation(Activityinfo.SCREEN_ORIENTATION_LANDSCRAPE) //以横屏显示

屏蔽掉横竖屏切换的操作

2,启动Activity A

onCreate->onStart->onRersume

3,按back返回、在Activity A中调用finish()方法

onPause->onStop->onDestory

4,按Home,打开另一个Activity B

onPause->onStop

5,再次进入Activity A

onRestart->onStart->onResume

6,dialog对话框
  • Android组件dialog

    Activity仍然位于前台,不影响生命周期

  • (自定义)Theme作为Dialog的Activity

    Activity A启动对话框 onPause ,关闭OnResume

测试一下:当两个Activity之间跳转时,必然会执行的方法是那些?

当Activity A 跳转到Activity B时,A会执行onPause,B会执行onCreate onStart onResume ,此时B覆盖了A,A会执行onStop,如果B是一个Android的弹窗或者是透明的那么就A不会执行onStop。如果B已经存在于Activity栈中,那么B也不会执行onCreate,所以必然会执行的是A的onPause,B的onStart、onResume