Android面试-Activity生命周期和启动模式

原创 2018年04月16日 21:06:39

生命周期分析

典型情况

  • ActivityA中打开ActivityB:ActivityA执行onPause,onStop,ActivityB执行onStart,onResume。注意ActivityB的onResume必须在ActivityA的onPause执行完后才会执行,若ActivityB为透明主题则ActivityA只不会调用onStop。
  • 按下Back键:执行onPause,onStop,onDestory

异常情况

系统配置改变导致Activity杀死重建

  • 资源加载机制:很多资源会根据当前设备情况从res目录下拿到不同的值。比如尺寸(large,small等限定符,横竖屏图片)
  • 数据保存和恢复:异常情况下销毁Activity时会在onStop之前调用onSaveInstanceState,重建Activity时在onStart之后调用onRestoreInstanceState。这两个方法都是通过Window委托DecorView通知视图中每个View调用自身onSaveInstanceState或onRestoreInstanceState去保存View各自数据。
  • onRestoreInstanceState和onCreate中恢复数据区别:前者的Bundle必定不为null,所以可以无需判空。
  • 防止系统配置改变就重建:指定Activity的configChanges属性,如指定为orientation,则旋转屏幕时Activity不重建,只会调用onConfigurationChanged方法。

内存不足导致优先级低的Activity被杀死

前台(可见可交互) > 可见非前台(可见无法交互,如弹出Dialog) > 后台(执行了onStop)

启动模式

  • standard:普通的,注意若用非Activity类型的Context去直接启动会报错,因为这种Context不存在任务栈。所以需要添加一个FLAG_ACTIVITY_NEW_TASK, 才可以用非Activity类型的Context去启动,会新建一个任务栈类似singleTask。
  • singletop:若新启动的Activity在栈顶则直接调用该实例的onNewIntent;若不在栈顶,则新建Activity实例。
  • singletask:若找到了所需的任务栈,栈内有该Activity则回调onNewIntent(若Activity不处于栈顶则cleartop使其处于栈顶),栈内没有则新建Activity实例压入栈;若没有所需的任务栈,则新建所需任务栈,并新建Activity实例入栈。
  • singleInstance:首次会新建一个任务栈和一个Activity实例放入,之后该Activity就单独位于一个任务栈,后续再启动它就不会创建新的Activity,除非该任务栈被销毁了。应用:通话界面。

注意:

  • 若ActivityA启动的ActivityB的任务栈是另一个任务栈,则按back键时会先把ActivityB所在任务栈的所有Activity先出栈。
  • Activity所需的任务栈即通过TaskAffinity指定名字,并且需要和singletask或allowTaskReparenting配对使用



ActivityDemo

  • 2017年06月26日 00:17
  • 43.05MB
  • 下载

ActivityDemo2

  • 2017年06月26日 00:19
  • 21.47MB
  • 下载

Activity的生命周期和启动模式详解

BACK键:   当我们按BACK键时,我们这个应用程序将结束,这时候我们将先后调用onPause()->onStop()->onDestory()三个方法。 再次启动App时,会执行onCreate...
  • robertcpp
  • robertcpp
  • 2016-07-01 10:12:42
  • 5366

Android面试题(一)——Activity的生命周期和启动模式

Android面试题(一)——Activity的生命周期和启动模式引言 这份面试题系列文章旨在查漏补缺,通过常见的面试题发现自己在Android基础知识上的遗漏和欠缺,验证所学是否扎实。 这是系列的第...
  • a471893438
  • a471893438
  • 2016-07-03 19:44:19
  • 1822

Android面试(Activity生命周期)

Activity作为Android的四大组件之一,是我们Android开发中打交道最为频繁的组件之一。而我们实际运用中却没有注意到很多Activity的细节知识点。所以在面试之中如果Activity相...
  • VickyWinner
  • VickyWinner
  • 2017-08-16 21:46:47
  • 322

Android中的Activity四种启动模式(launchMode)(面试必问)

android:launchMode standard 默认标准的启动模式,每次startActivity(Intent intent)请求都创建一个新的activity实 例,适用于大多数场景。 ...
  • u013128651
  • u013128651
  • 2016-04-10 19:18:17
  • 320

activity4种启动模式,生命周期的理解

一、Activity的生命周期 当activity处于应用中运行时,它的活动状态是由以activity栈的形式管理的。固随着不同应用的运行,每个activity都可能从活动状态转到非活动状态,也会从...
  • HUandroid
  • HUandroid
  • 2016-08-18 21:48:29
  • 714

Android必考面试题之一——Activity的生命周期以及流程图

生命周期包括几个方法:onCreate()、onStart()、onResume()、onPause()、onStop()、onDestroy()...... 我们也基本了解了Activity...
  • csdavy103
  • csdavy103
  • 2016-12-19 16:53:14
  • 730

[Android]当Activity启动模式为singleTask时的生命周期

01-09 22:59:24.317 13063-13063/com.dongua.activitytest I/Activity1: onCreate: 01-09 22:59:24.319 13...
  • d_dmelon
  • d_dmelon
  • 2017-01-09 23:07:16
  • 2198

Android开发艺术探索笔记(一) Activity的生命周期和启动模式(1)

Activity作为Android开发中最常用的一个组件,是Android开发人员必须熟悉且掌握的重要内容。同时Activity也是在面试中经常被问到的一个方向。因此,掌握Activity的重要性也不...
  • dengminghli
  • dengminghli
  • 2017-01-10 13:01:10
  • 2327
收藏助手
不良信息举报
您举报文章:Android面试-Activity生命周期和启动模式
举报原因:
原因补充:

(最多只允许输入30个字)