没有合适的资源?快使用搜索试试~ 我知道了~
andriod各个知识点.pdf
需积分: 0 0 下载量 17 浏览量
2023-02-07
21:52:56
上传
评论
收藏 4.68MB PDF 举报
温馨提示
试读
126页
面试.pdf
资源推荐
资源详情
资源评论
Android 高级开发面试题以及答案
前言
网上高级工程师面试相关文章鱼龙混杂,要么一堆内容,要么内容质量太浅, 鉴
于此我整理了如下安卓开发高级工程师面试题以及答案帮助大家顺利进阶为高
级工程师,目前我就职于某大厂安卓高级工程师职位,在当下大环境下也想为安
卓工程师出一份力,通过我的技术经验整理了面试经常问的题,答案部分会是一
篇文章或者几篇文章,都是我认真看过并且觉得不错才整理出来,大家知道高级
工程师不会像刚入门那样被问的问题一句话两句话就能表述清楚,所以我通过过
滤好文章来帮助大家理解,进入正题:
1.Activity
1.1.Activity的启动流程
Activity跨进程启动
https://juejin.im/post/6844903959581163528#heading-1
http://gityuan.com/2016/03/12/start-activity/
启动流程:
点击桌面App图标,Launcher进程采用Binder IPC向system_server进程发起startActivity请求;
system_server进程接收到请求后,向zygote进程发送创建进程的请求;
Zygote进程fork出新的子进程,即App进程;
App进程,通过Binder IPC向sytem_server进程发起attachApplication请求;
system_server进程在收到请求后,进行一系列准备工作后,再通过binder IPC向App进 程发送
scheduleLaunchActivity请求;
App进程的binder线程(ApplicationThread)在收到请求后,通过handler向主线程发送LAUNCH_ACTIVITY消
息;
主线程在收到Message后,通过发射机制创建目标Activity,并回调Activity.onCreate()等方法。
Activity进程内启动
请求进程A:startActivity—(hook插入点1) (AMP,ActivityManager代理对象)——> system_server进程:
AMS(ActivityManagerService)
解析Activity信息、处理启动参数、scheduleLaunchActivity/mH中EXECUTE_TRANSACTION消息处理(Android
P)-->
回到请求进程A:ApplicationThread --> ActivityThread -(hook插入点2)-> Activity生命周期
()
1.2.onSaveInstanceState(),onRestoreInstanceState的掉用时机
1.2.1onSaveInstanceState(Bundle outState)会在以下情况被调用:
1.2.1.1、从最近应用中选择运行其他的程序时。
1.2.1.2、当用户按下HOME键时。
1.2.1.3、屏幕方向切换时(无论竖屏切横屏还是横屏切竖屏都会调用)。
1.2.1.4、按下电源按键(关闭屏幕显示)时。
1.2.1.5、从当前activity启动一个新的activity时。
onPause -> onSaveInstanceState -> onStop。
1.2.2onRestoreInstanceState(Bundle outState)会在以下情况被调用:
onRestoreInstanceState(Bundle savedInstanceState)只有在activity确实是被系统回收,重新创建activity的情
况下才会被调用。
1.2.2.1.屏幕方向切换时,activity生命周期如下
onPause -> onSaveInstanceState -> onStop -> onDestroy -> onCreate -> onStart -> onRestoreInstanceState
-> onResume
1.2.2.2.在后台被回收
1.2.2.3.按HOME键返回桌面,又马上点击应用图标回到原来页面时不会被回收
onStart -> onRestoreInstanceState -> onResume
1.2.3源码
系统会调用ActivityThread的performStopActivity方法中掉用onSaveInstanceState, 将状态保存在mActivities
中,mActivities维护了一个Activity的信息表,当Activity重启时候,会从mActivities中查询到对应的
ActivityClientRecord。
如果有信息,则调用Activity的onResoreInstanceState方法,
在ActivityThread的performLaunchActivity方法中,统会判断ActivityClientRecord对象的state是否为空
不为空则通过Activity的onSaveInstanceState获取其UI状态信息,通过这些信息传递给Activity的onCreate方
法,
1.3.activity的启动模式和使用场景
1.3.1 android任务栈
我们每次打开一个新的Activity或者退出当前Activity都会在一个称为任务栈的结构中添加或者减少一个Activity组
件,一个任务栈包含了一个activity的集合。
android通过ActivityRecord、TaskRecord、ActivityStack,ActivityStackSupervisor,ProcessRecord有序地管
理每个activity。
1.3.2 Standard
默认模式,每次启动Activity都会创建一个新的Activity实例。
1.3.3 SingleTop
通知消息打开的页面
如果要启动的Activity已经在栈顶,则不会重新创建Activity,只会调用该该Activity的onNewIntent()方法。
如果要启动的Activity不在栈顶,则会重新创建该Activity的实例。
1.3.4 SingleTask
主界面
如果要启动的Activity已经存在于它想要归属的栈中,那么不会创建该Activity实例,将栈中位于该Activity上的所
有的Activity出栈,同时该Activity的onNewIntent()方法会被调用。
1.3.5SingleInstance
呼叫来电界面
要创建在一个新栈,然后创建该Activity实例并压入新栈中,新栈中只会存在这一个Activity实例。
1.4.Activity A跳转Activity B,再按返回键,生命周期执行的顺序
https://www.sohu.com/a/402329833_611601
https://www.jianshu.com/p/6d9d830a758d
在A跳转B会执行:A onPause -> B onCreate -> B onStart -> B onResume->A onStop
在B按下返回键会执行:B onPause -> A onRestart -> A onStart -> A onResume-> B onStop -> B onDestroy
当A跳转到B的时候,A先执行onPause,然后居然是B再执行onCreate -> onStart -> onResume,最后才执行A
的onStop!!!
当B按下返回键,B先执行onPause,然后居然是A再执行onRestart -> onStart -> onResume,最后才是B执行
onStop -> onDestroy!!!
当 B Activity 的 launchMode 为 singleInstance,singleTask 且对应的 B Activity 有可复用的实例时,生命周期
回调是这样的:
A.onPause -> B.onNewIntent -> B.onRestart -> B.onStart -> B.onResume -> A.onStop -> ( 如果 A 被移出栈的
话还有一个 A.onDestory)
当 B Activity 的 launchMode 为 singleTop且 B Activity 已经在栈顶时(一些特殊情况如通知栏点击、连点),
此时只有 B 页面自己有生命周期变化:
B.onPause -> B.onNewIntent -> B.onResume
1.5.横竖屏切换,按home键,按返回键,锁屏与解锁屏幕,跳转透明Activity界面,
启动一个 Theme 为 Dialog 的 Activity,弹出Dialog时Activity的生命周期
横竖屏切换:
从 Android 3.2 (API级别 13)开始
https://www.jianshu.com/p/dbc7e81aead2
1、不设置Activity的androidconfigChanges,或设置Activity的androidconfigChanges="orientation",或设置
Activity的android:configChanges="orientation|keyboardHidden",切屏会重新调用各个生命周期,切横屏时会执
行一次,切竖屏时会执行一次。
2、配置 android:configChanges="orientation|keyboardHidden|screenSize",才不会销毁 activity,且只调
用 onConfigurationChanged方法。
竖屏:
启动:onCreat->onStart->onResume.
切换横屏时:
onPause-> onSaveInstanceState ->onStop->onDestory
onCreat->onStart->onSaveInstanceState->onResume.
如果配置这个属性:androidconfigChanges="orientation|keyboardHidden|screenSize"
就不会在调用Activity的生命周期,只会调用onConfigurationChanged方法
HOME键的执行顺序:onPause->onStop->onRestart->onStart->onResume
BACK键的顺序: onPause->onStop->onDestroy->onCreate->onStart->onResume
锁屏:锁屏时只会调用onPause(),而不会调用onStop方法,开屏后则调用onResume()。
弹出 Dialog: 直接是通过 WindowManager.addView 显示的(没有经过 AMS),所以不会对生命周期有任何
影响。
启动theme为DialogActivity,跳转透明Activity
A.onPause -> B.onCrete -> B.onStart -> B.onResume
( Activity 不会回调 onStop,因为只有在 Activity 切到后台不可见才会回调 onStop)
https://www.sohu.com/a/402329833_611601
1.6.onStart 和 onResume、onPause 和 onStop 的区别
onStart 和 onResume 从 Activity 可见可交互区分
onStart 用户可以看到部分activity但不能与它交互 onResume()可以获得activity的焦点,能够与用户交互
onStop 和 onPause 从 Activity 是否位于前台,是否有焦点区分
onPause表示当前页面失去焦点。
onStop表示当前页面不可见。
dialog的主题页面,这个时候,打开着一个页面,就只会执行onPause,而不会执行onStop。
1.7.Activity之间传递数据的方式Intent是否有大小限制,如果传递的数据量
偏大,有哪些方案
startActivity->startActivityForResult->Instrumentation.execStartActivity
->ActivityManger.getService().startActivity
intent中携带的数据要从APP进程传输到AMS进程,再由AMS进程传输到目标Activity所在进程
通过Binder来实现进程间通信
1.Binder 驱动在内核空间创建一个数据接收缓存区。
2.在内核空间开辟一块内核缓存区,建立内核缓存区和内核空间的数据接收缓存区之间的映射关系,以及内核中
数据接收缓存区和接收进程用户空间地址的映射关系。
3.发送方进程通过系统调用 copyfromuser() 将数据 copy 到内核空间的内核缓存区,由于内核缓存区和接收进程
的用户空间存在内存映射,因此也就相当于把数据发送到了接收进程的用户空间,这样便完成了一次进程间的通信。
为当使用Intent来传递数据时,用到了Binder机制,数据就存放在了Binder的事务缓冲区里面,而事务缓冲区是
有大小限制的。普通的由Zygote孵化而来的用户进程,映射的Binder内存大小是不到1M的
Binder 本身就是为了进程间频繁-灵活的通信所设计的, 并不是为了拷贝大量数据
如果非 ipc
单例,eventBus,Application,sqlite、shared preference、file 都可以;
剩余125页未读,继续阅读
资源评论
猪猪上
- 粉丝: 10
- 资源: 10
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 农村信用社联合社计算机信息系统投产与变更管理办.docx
- 农村信用社联合社计算机信息系统数据管理办法.docx
- 利用SPSS作临床效度分析线上计算网站介绍-医学研究部统计谘.(医学PPT课件).ppt
- 利用Zabbix监控mysqldump定时备份数据库状态.docx
- 利用计算机解决问题的基本过程.doc
- 化工铁路通信工程总结.doc
- 北京大学网络教育软件工程作业.docx
- 医药公司(连锁店)计算机操作规程未新系统的自行按照旧制修改-新系统过制的编号加修模版.doc
- 医药公司(连锁店)计算机系统操作规程模版.doc
- 医药连锁门店计算机系统的操作和管理程序未新系统的自行按照旧制修改-新系统过制的编号加修模版.docx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功