Android面试题

1、Android系统的架构
Android系统架构之应用程序
Android会同一系列核心应用程序包一起发布,该应用程序包包括email客户端,SMS短消息程序,日历,地图,浏览器,联系人管理程序等;所有的应用程序都是使用JAVA语言编写的
Android系统架构之应用程序框架
开发人员可以完全访问核心应用程序所使用的API框架(android.jar); 该应用程序的架构设计简化了组件的重用,任何一个应用程序都可以发布它的功能块并且任何其它的应用程序都可以使用其所发布的功能块
Android系统架构之系统运行库
Android 包含一些C/C++库,这些库能被Android系统中不同的组件使用; 它们通过 Android 应用程序框架为开发者提供服务
Android系统架构之Linux 内核
Android 的核心系统服务依赖于 Linux 2.6 内核,如安全性,内存管理,进程管理, 网络协议栈和驱动模型; Linux 内核也同时作为硬件和软件栈之间的抽象层
2、activity的生命周期
Activity生命周期方法主要有onCreate()、onStart()、onResume()、onPause()、onStop()、onDestroy()和onRestart()等7个方法
- 启动一个A Activity,分别执行onCreate()、onStart()、onResume()方法
- 从A Activity打开B Activity分别执行A onPause()、B onCreate()、B onStart()、B onResume()、A onStop()方法
- 关闭B Activity,分别执行B onPause()、A onRestart()、A onStart()、A onResume()、B onStop()、B onDestroy()方法
- 横竖屏切换A Activity,清单文件中不设置android:configChanges属性时,先销毁onPause()、onStop()、onDestroy()再重新创建onCreate()、onStart()、onResume()方法,设置orientation|screenSize(一定要同时出现)属性值时,不走生命周期方法,只会执行onConfigurationChanged()方法
- Activity之间的切换可以看出onPause()、onStop()这两个方法比较特殊,切换的时候onPause()方法不要加入太多耗时操作否则会影响体验
3、Fragment的生命周期
Fragment的生命周期方法主要有:
onAttach()、onCreate()、onCreateView()、onActivityCreated()、onstart()、onResume()、onPause()、onStop()、onDestroyView()、onDestroy()、onDetach()等11个方法
- 切换到该Fragment,分别执行onAttach()、onCreate()、onCreateView()、onActivityCreated()、onstart()、onResume()方法
- 锁屏,分别执行onPause()、onStop()方法
- 亮屏,分别执行onstart()、onResume()方法
- 覆盖,切换到其他Fragment,分别执行onPause()、onStop()、onDestroyView()方法
- 从其他Fragment回到之前Fragment,分别执行onCreateView()、onActivityCreated()、onstart()、onResume()方法
4、Service生命周期
在Service的生命周期里,常用的有:
4个手动调用的方法
- startService() 启动服务
- stopService() 关闭服务
- bindService() 绑定服务
- unbindService() 解绑服务
5个内部自动调用的方法
- onCreat() 创建服务
- onStartCommand() 开始服务
- onDestroy() 销毁服务
- onBind() 绑定服务
- onUnbind() 解绑服务
手动调用startService()启动服务,自动调用内部方法:
onCreate()、onStartCommand(),如果一个Service被startService()多次启动,那么onCreate()也只会调用一次
手动调用stopService()关闭服务,自动调用内部方法:
onDestory(),如果一个Service被启动且被绑定,如果在没有解绑的前提下使用stopService()关闭服务是无法停止服务的
手动调用bindService()后,自动调用内部方法:
onCreate()、onBind()
手动调用unbindService()后,自动调用内部方法:
onUnbind()、onDestory()
startService()和stopService()只能开启和关闭Service,无法操作Service,调用者退出后Service仍然存在;bindService()和unbindService()可以操作Service,调用者退出后,Service随着调用者销毁
5、Android中4大组件
Activity:
Activity是Android程序与用户交互的窗口,是Android构造块中最基本的一种,它需要为保持各界面的状态,做很多持久化的事情,妥善管理生命周期以及一些跳转逻辑
BroadCast Receiver:
接受一种或者多种Intent作触发事件,接受相关消息,做一些简单处理,转换成一条Notification,统一了Android的事件广播模型
Content Provider:
是Android提供的第三方应用数据的访问方案,可以派生Content Provider类,对外提供数据,可以像数据库一样进行选择排序,屏蔽内部数据的存储细节,向外提供统一的接口模型,大大简化上层应用,对数据的整合提 供了更方便的途径
service:
后台服务于Activity,封装有一个完整的功能逻辑实现,接受上层指令,完成相关的事务,定义好需要接受的Intent提供同步和异步的接口
6、Android中常用布局
常用的布局:
- FrameLayout(帧布局):所有东西依次都放在左上角,会重叠
- LinearLayout(线性布局):按照水平和垂直进行数据展示
- RelativeLayout(相对布局):以某一个元素为参照物,来定位的布局方式复制代码
不常用的布局:
- TableLayout(表格布局): 每一个TableLayout里面有表格行TableRow,TableRow里面可以具体定义每一个元素(Android TV上使用)
- AbsoluteLayout(绝对布局):用X,Y坐标来指定元素的位置,元素多就不适用(机顶盒上使用)复制代码
新增布局:
- PercentRelativeLayout(百分比相对布局)可以通过百分比控制控件的大小
- PercentFrameLayout(百分比帧布局)可以通过百分比控制控件的大小
7、消息推送的方式
方案1 使用极光和友盟推送
方案2 使用XMPP协议(Openfire + Spark + Smack)
- 简介: 基于XML协议的通讯协议,前身是Jabber,目前已由IETF国际标准化组织完成了标准化工作
- 优点: 协议成熟、强大、可扩展性强、目前主要应用于许多聊天系统中,且已有开源的Java版的开发实例androidpn
- 缺点: 协议较复杂、冗余(基于XML)、费流量、费电,部署硬件成本高
方案3、 使用MQTT协议
- 简介: 轻量级的、基于代理的“发布/订阅”模式的消息传输协议
- 优点: 协议简洁、小巧、可扩展性强、省流量、省电,目前已经应用到企业领域
- 缺点: 不够成熟、实现较复杂、服务端组件rsmb不开源,部署硬件成本较高
方案4、 使用HTTP轮循方式
- 简介: 定时向HTTP服务端接口(Web Service API)获取最新消息
- 优点: 实现简单、可控性强,部署硬件成本低
- 缺点: 实时性差
8、android的数据存储
使用SharedPreferences存储数据; 它是Android提供的用来存储一些简单配置信息的一种机制,采用了XML格式将数据存储到设备中;只能在同一个包内使用,不能在不同的包之间使用
文件存储数据; 文件存储方式是一种较常用的方法,在Android中读取/写入文件的方法,与Java中实现I/O的程序是完全一样的,提供了openFileInput()和openFileOutput()方法来读取设备上的文件
SQLite数据库存储数据; SQLite是Android所带的一个标准的数据库,它支持SQL语句,它是一个轻量级的嵌入式数据库
使用ContentProvider存储数据; 主要用于应用程序之间进行数据交换,从而能够让其他的应用保存或读取此Content Provider的各种数据类型
网络存储数据; 通过网络上提供给我们的存储空间来上传(存储)和下载(获取)我们存储在网络空间中的数据信息
说了这么多,其实最重要的就是一句话,问问你自己:
你现在所拥有的技术层次真的有信心步入更高阶的程序员当中吗?
近段时间我这里整理了一份完整的《2022年 Android 中高级面试题汇总》希望这份系统化的技术体系对大家有一个方向参考

获取方式:
点击:《2022年 Android 中高级面试题汇总》 即可 免费获取
《2022年 Android 中高级面试题汇总》
由于篇幅有限,仅展示部分内容
第一章 Java 基础
第一节 静态内部类和非静态内部类的比较
1.1 静态内部类和非静态内部类的区别
1.2 扩展:内部类都有哪些?
1.3 同部内部类
1.4 匿名内部类:是一种没有炎名的内部类
第二节 多态的理解与应用
2.1 多态概述
2.2 多态中成员的持点
2.3 instanceof关桩字
2.4 多态的转型
2.5 多态案例

第三节 java 方法的多态性理解
3.1 什么是java的多态
3.2 远行时多态3.3代码理解
3.4 深一点
3.5 再深一点
3.6 最后一个炼习
第四节 java中接口和选承的区别
第五节 线程池的好处,详解,单例(绝对好记)
5.1 线程池的好处
5.2 线程池的详解
5.3 线程池的单例

第二章 Android 基础
第一节 Activity 知识点(必问)
1.1 Activity 启动过程全解析
1.2 启动模式以及使用场景
1.3 onSavelnstanceStatelJBonRestorelnstar
1.4onConfigurationChanged使用以及问题解决

第二节 Fragment 知识点
2.1 Fragment的通信问题,新建Fragment为何不
2.2 为什么官方推荐Fragment.setArguments(B
2.3 Androidx下Fragment懒加载的新实现
2.4 Fragment全解析系列(一):那些年深过的
2.5 Google-Fragment 概览
2.6 Google -与其他 Fragment 通信

第三节 Service 知识点
3.1 Handle 知识点(必问)
3.2 Android 主线程阻塞处理及优化
3.3深入聊聊Android消息机制中的消息队列的
3.4深入理解MessageQueue
3.5 你真的懂Handler.postDelayed(的原理吗?
3.6 Handler.postDelayed0是如何精确延迟指成
3.7 Handler 延迟消息执行机制,会阻塞吗?
第四节Intent知识点
4.1 Android 跨进程传递大内存数据
4.2 数据存健

获取方式:
点击:《2022年 Android 中高级面试题汇总》 即可 免费获取
技术是无止境的,你需要对自己提交的每一行代码、使用的每一个工具负责,不断挖掘其底层原理,才能使自己的技术升华到更高的层面
Android 架构师之路还很漫长,与君共勉
PS:有问题欢迎指正,可以在评论区留下你的建议和感受;
欢迎大家点赞评论,觉得内容可以的话,可以转发分享一下
网友评论