-
思路:分条解释Activity从创建到销毁整个生命周期中涉及到的方法及作用
-
参考回答:在Activity的生命周期涉及到七大方法,分别是:
-
onCreate()表示Activity 正在创建,常做初始化工作,如setContentView界面资源、初始化数据
-
onStart()表示Activity 正在启动,这时Activity 可见但不在前台,无法和用户交互
-
onResume()表示Activity 获得焦点,此时Activity 可见且在前台并开始活动
-
onPause()表示Activity 正在停止,可做 数据存储、停止动画等操作
-
onStop()表示activity 即将停止,可做稍微重量级回收工作,如取消网络连接、注销广播接收器等
-
onDestroy()表示Activity 即将销毁,常做回收工作、资源释放
-
另外,当Activity由后台切换到前台,由不可见到可见时会调用onRestart(),表示Activity 重新启动
-
Q2:onStart()和onResume()/onPause()和onStop()的区别?
-
技术点:Activity生命周期
-
思路:可从使用细节出发
-
参考回答:onStart()与onStop()是从Activity是否可见这个角度调用的,onResume()和onPause()是从Activity是否显示在前台这个角度来回调的,在实际使用没其他明显区别。
Q3:Activity A 启动另一个Activity B 会回调哪些方法?如果Activity B是完全透明呢?如果启动的是一个对话框Activity呢?
-
技术点:Activity生命周期
-
参考回答:Activity A启动另一个Activity B会回调的方法:Activity A的onPause() -->Activity B的onCreate()–>onStart()–>onResume()–>Activity A的onStop();如果Activity B是完全透明的,则最后不会调用Activity A的onStop();如果是对话框Activity,同后种情况。
Q4:谈谈onSaveInstanceState()方法?何时会调用?
-
技术点:Activity重建
-
思路:可从使用场景、调用次序上解释
-
参考回答:当非人为终止Activity时,比如系统配置发生改变时导致Activity被杀死并重新创建、资源内存不足导致低优先级的Activity被杀死,会调用 onSavaInstanceState() 来保存状态。该方法调用在onStop之前,但和onPause没有时序关系。
-
引申:可再谈谈它和onRestoreInstanceState()的关系以及后者的作用
Q5:onSaveInstanceState()与onPause()的区别?
-
技术点:Activity重建
-
思路:可从适用场景出发
-
参考回答:onSaveInstanceState()适用于对临时性状态的保存,而onPause()适用于对数据的持久化保存。
Q6:如何避免配置改变时Activity重建?
-
技术点:Activity重建
-
思路:一种解决思路是设置配置文件中Activity的configChanges属性
-
参考回答:为了避免由于配置改变导致Activity重建,可在AndroidManifest.xml中对应的Activity中设置android:configChanges=“orientation|screenSize”。此时再次旋转屏幕时,该Activity不会被系统杀死和重建,只会调用onConfigurationChanged。因此,当配置程序需要响应配置改变,指定configChanges属性,重写onConfigurationChanged方法即可。
Q7:优先级低的Activity在内存不足被回收后怎样做可以恢复到销毁前状态?
-
技术点:Activity重建
-
思路:可从Activity重建会被调用的方法出发
-
参考回答:优先级低的Activity在内存不足被回收后重新打开会引发Activity重建。Activity被重新创建时会调用onRestoreInstanceState(该方法在onStart之后),并将onSavaInstanceState保存的Bundle对象作为参数传到onRestoreInstanceState与onCreate方法。因此可通过onRestoreInstanceState(Bundle savedInstanceState)和onCreate((Bundle savedInstanceState)来判断Activity是否被重建,并取出数据进行恢复。但需要注意的是,在onCreate取出数据时一定要先判断savedInstanceState是否为空。另外,谷歌更推荐使用onRestoreInstanceState进行数据恢复。
Q8:说下Activity的四种启动模式?(有时会出个实际问题来分析返回栈中Activity的情况)
-
技术点:Activity启动模式
-
思路:分条解释四个启动模式的特点
-
参考回答:
-
standard标准模式:每次启动一个Activity就会创建一个新的实例
-
singleTop栈顶复用模式:如果新Activity已经位于任务栈的栈顶,就不会重新创建,并回调 onNewIntent(intent) 方法
-
singleTask栈内复用模式:只要该Activity在一个任务栈中存在,都不会重新创建,并回调 onNewIntent(intent) 方法。如果不存在,系统会先寻找是否存在需要的栈,如果不存在该栈,就创建一个任务栈,并把该Activity放进去;如果存在,就会创建到已经存在的栈中
-
singleInstance单实例模式:具有此模式的Activity只能单独位于一个任务栈中,且此任务栈中只有唯一一个实例
-
Q9:谈谈singleTop和singleTask的区别以及应用场景
-
技术点:Activity启动模式
-
思路:可先解释两个启动模式的含义(见上一个问题),再总结不同点,最后给出应用实例
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip204888 (备注Android)
作者2013年从java开发,转做Android开发,在小厂待过,也去过华为,OPPO等大厂待过,18年四月份进了阿里一直到现在。
参与过不少面试,也当面试官 面试过很多人。深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长,而且极易碰到天花板技术停滞不前!
我整理了一份阿里P7级别的最系统的Android开发主流技术,特别适合有3-5年以上经验的小伙伴深入学习提升。
主要包括阿里,以及字节跳动,腾讯,华为,小米,等一线互联网公司主流架构技术。如果你想深入系统学习Android开发,成为一名合格的高级工程师,可以收藏一下这些Android进阶技术选型
我搜集整理过这几年阿里,以及腾讯,字节跳动,华为,小米等公司的面试题,把面试的要求和技术点梳理成一份大而全的“ Android架构师”面试 Xmind(实际上比预期多花了不少精力),包含知识脉络 + 分支细节。
Java语言与原理;
大厂,小厂。Android面试先看你熟不熟悉Java语言
高级UI与自定义view;
自定义view,Android开发的基本功。
性能调优;
数据结构算法,设计模式。都是这里面的关键基础和重点需要熟练的。
NDK开发;
未来的方向,高薪必会。
前沿技术;
组件化,热升级,热修复,框架设计
网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。
我在搭建这些技术框架的时候,还整理了系统的高级进阶教程,会比自己碎片化学习效果强太多,CodeChina上可见;
当然,想要深入学习并掌握这些能力,并不简单。关于如何学习,做程序员这一行什么工作强度大家都懂,但是不管工作多忙,每周也要雷打不动的抽出 2 小时用来学习。
不出半年,你就能看出变化!
一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!
AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算
AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算