首页
学习
活动
专区
圈层
工具
发布
30 篇文章
1
android横竖屏切换activity生命周期变化
2
Android:Service生命周期最全面解析
3
Android 面试官:简述一下 View 的绘制流程,这个都答不出来就别想拿Offer了
4
一文解决Android View滑动冲突
5
Android Handler机制11之Handler机制总结
6
android View层的绘制流程
7
深入理解 Android 消息机制原理
8
Android 7.0 中 Launcher 启动 Activity 过程
9
「细品源码」 Android 系统的血液:Handler
10
Android ListView 与 RecyclerView 对比浅析:缓存机制
11
深入理解Android插件化技术
12
Android组件化框架项目详解
13
《Android插件化技术——原理篇》
14
Android面试遇坎,我精选了这些题目与答案,你离大厂还有多远测试一下就知道!
15
史上最全的Android面试题集锦
16
Activity三问—猫眼真题
17
Android 面试黑洞——当我按下 Home 键再切回来,会发生什么?
18
笔记——JVM、DVM(dalvik)和ART之间的区别(二十)
19
ClassLoader解析(二):Android中的ClassLoader
20
Android类加载之PathClassLoader和DexClassLoader
21
用代码手把手教你使用MVVM
22
从构建工具看 Android APK 编译打包流程
23
《Android面试题思考与解答》2021年3月刊
24
《Android面试题思考与解答》2021年1月刊
25
Android MVVM模式入门
26
ViewModel三问—阿里真题
27
ANR 原理与实战技巧
28
你真的会用Retrofit2吗?Retrofit2完全教程
29
Android 进阶11:进程通信之 ContentProvider 内容提供者
30
Android:关于ContentProvider的知识都在这里了!

Activity三问—猫眼真题

前言

Activity算是我们使用最多也是最基础的内容了。但是为什么面试还会频频问到呢?即使是面试高级Android职位。说到底还是因为他足够重要,万丈高楼平地起,打好基础永远都是第一位的。今天就聊聊关于Activity的一些知识点:

  • 介绍Activity几种启动模式。
  • Activity依次A→B→C→B,其中B启动模式为singleTask,AC都为standard,生命周期分别怎么调用?如果B启动模式为singleInstance又会怎么调用?B启动模式为singleInstance不变,A→B→C的时候点击两次返回,生命周期如何调用。
  • 屏幕旋转时Activity的生命周期,如何防止Activity重建。

介绍几种启动模式。

  • standard,默认模式,每次启动都会新建一个Activity实例,并进入当前任务栈
  • singleTop,如果要启动的Activity在栈顶存在实例,则不会重新创建Activity,而是直接使用栈顶的Activity实例,并回调onNewIntent方法。
  • singleTask,如果要启动的Activity在栈中存在实例,则不会重新创建Activity,而是直接使用栈里的Activity实例,并回调onNewIntent方法。并且会把这个实例放到栈顶,之前在这个Activity之上的都会被出栈销毁。
  • singleInstance,有点单例的感觉,就是所启动的Activity会单独放在一个任务栈里,并且后续所有启动该Activity都会直接用这个实例,同样被重复调用的时候会调用并回调onNewIntent方法。

Activity依次A→B→C→B,其中B启动模式为singleTask,AC都为standard,生命周期分别怎么调用?

如果B启动模式为singleInstance又会怎么调用?

B启动模式为singleInstance不变,A→B→C的时候点击两次返回,生命周期如何调用。

1)A→B→C→B,B启动模式为singleTask

  • 启动A的过程,生命周期调用是 (A)onCreate→(A)onStart→(A)onResume
  • 再启动B的过程,生命周期调用是 (A)onPause→(B)onCreate→(B)onStart→(B)onResume→(A)onStop
  • B→C的过程同上
  • C→B的过程,由于B启动模式为singleTask,所以B会调用onNewIntent,并且将B之上的实例移除,也就是C会被移出栈。所以生命周期调用是 (C)onPause→(B)onNewIntent→(B)onRestart→(B)onStart→(B)onResume→(C)onStop→(C)onDestory

2)A→B→C→B,B启动模式为singleInstance

  • 如果B为singleInstance,那么C→B的过程,C就不会被移除,因为B和C不在一个任务栈里面。所以生命周期调用是 (C)onPause→(B)onNewIntent→(B)onRestart→(B)onStart→(B)onResume→(C)onStop

3)A→B→C,B启动模式为singleInstance,点击两次返回键

  • 如果B为singleInstance,A→B→C的过程,生命周期还是同前面一样正常调用。但是点击返回的时候,由于AC同任务栈,所以C点击返回,会回到A,再点击返回才回到B。所以生命周期是:(C)onPause→(A)onRestart→(A)onStart→(A)onResume→(C)onStop→(C)onDestory。
  • 再次点击返回,就会回到B,所以生命周期是:(A)onPause→(B)onRestart→(B)onStart→(B)onResume→(A)onStop→(A)onDestory。

屏幕旋转时Activity的生命周期,如何防止Activity重建。

  • 切换屏幕的生命周期是:onConfigurationChanged->onPause->onSaveInstanceState->onStop->onDestroy->onCreate->onStart->onRestoreInstanceState->onResume
  • 如果需要防止旋转时候,Activity重新创建的话需要做如下配置:在targetSdkVersion的值小于或等于12时,配置 android:configChanges="orientation", 在targetSdkVersion的值大于12时,配置 android:configChanges="orientation|screenSize"。
下一篇
举报
领券