android面试技术及经验剖析
主要介绍android常见的面试技术点,以及面试过程中的经验交流
qq601517284
本人特别热爱android开发,自己也独立完成了很多小的项目,希望能够和大家一起分享,一起学习
展开
-
简述Android framework之AMS、PMS、WMS
服务端主要是ActivityManagerService(AMS), WindowManagerService(WMS),PackageM anerService(PMS)AMS 主要用于管理所有应用程序的Activity WMS 管理各个窗口,隐藏,显示等 PMS 用来管理跟踪所有应用APK,安装,解析,控制权限等.还有用来处理触摸消息的两个类KeyInputQueue和Input...原创 2020-03-21 15:12:09 · 5352 阅读 · 1 评论 -
理解PackageManager
PackageManager是Android为管理应用程序安装包(apk)提供的包管理器它的功能如下:1 权限处理,包括对系统和应用定义的Permission和Permission Group信息的添加、删除、查询和检查2 包处理,包括扫描并安装和卸载apk包,查询包的UID、GID、包名、系统默认程序等信息3 比较两个包的signatures信息是否相同4 查询Activi...原创 2020-03-21 11:09:54 · 1272 阅读 · 0 评论 -
WMS的重要成员以及Window添加和删除过程
1 mPolicy:WindowManagerPolicymPolicy是WindowManagerPolicy类型的变量。WindowManagerPolicy是窗口管理策略的接口类,用来定义一个窗口策略所要遵循的通用规范,并提供了WindowManager所有的特定的UI行为。它的具体实现类为PhoneWindowManager,这个实现类在WMS创建时被调用。 WMP运行定制窗口层级和特...原创 2020-03-20 18:17:38 · 300 阅读 · 0 评论 -
理解WindowManagerService
一 WMS的职责1 窗口管理WMS是窗口的管理者,它复杂窗口的启动、添加和删除,另外窗口的大小和层级也是由WMS进行管理的窗口管理的核心成员有DisplayContent、WindowToken和WindowState2 窗口动画窗口间进行切换时,使用窗口动画更炫一些,窗口动画由WMS的动画子系统来负责,动画子系统的管理者为WindowAnimator3 输入系统的中转站...原创 2020-03-20 12:14:59 · 134 阅读 · 0 评论 -
Android系统启动流程
一 init 进程启动过程 init0进程是Android系统中用户空间的第一个进程,进程号为1,它的职责包括创建Zygote(孵化器)和属性服务等。init进程是由多个源文件共同组成的,这些文件位于system/core/init中按下启动电源时,系统启动会加载引导程序,引导程序又启动linux内核,在Linux内核加载完成后,第一件事就是启动init进程 ...原创 2020-03-18 18:21:21 · 117 阅读 · 0 评论 -
Android系统架构浅析
原创 2020-03-18 11:53:01 · 81 阅读 · 0 评论 -
AMS重要的数据结构
ActivityRecord内部存储了activity所有信息,包括AMS的引用、AndroidManifes节点信息、activity状态、activity资源信息和activity进程相关信息,其中含有该AcitivityRecord所在的TaskRecord,这就将ActivityRecord和TaskRecord关联在一起了 名称 类型 ...原创 2020-03-16 23:40:59 · 381 阅读 · 0 评论 -
Android开发书籍推荐
入门级:第一行代码Android编程权威指南进阶:《Android开发艺术探索》《Android进阶解密》《Android群英传》《Android进阶之光》源码方面:《Android源码设计模式》《深入理解Android内核设计思想》《深入理解Android》卷1,2,3《Android系统源代码情景分析》...原创 2020-03-16 22:48:12 · 265 阅读 · 0 评论 -
深入理解Android AMS
在activity的启动过程中会调用Instrumentation的execStartActivity方法:涉及代码:Instrumentation.java core\java\android\app\Instrumentation.java这里调用到了ActivityManager的getService方法:ActivityTaskManager.java c...原创 2020-03-16 21:22:34 · 486 阅读 · 0 评论 -
Android的消息机制
MessageQueue: 消息队列,消息的存储单元,它的内部存储了一组消息,以队列的形式对外提供插入和删除的工作。虽然叫消息队列,但是它的内部存储结构并不是真正的队列,而是采用单链表的数据结构来存储消息列表。Looper:消息循环,由于MessageQueue只是一个消息的存储单元,它不能处理消息,而Looper就填补了这个功能,Looper会以无限循环的形式去查找是否有新消息,如果有的话就...原创 2020-03-16 11:28:30 · 99 阅读 · 0 评论 -
Activity的Flags
在使用标记位的时候,要注意有些标记位是系统内部使用的,应用程序不需要去手动设置这些标记位以防出现问题。FLAG_ACTIVITY_NEW_TASK这个标记位的作用是为Activity指定“singleTask”启动模式,其效果和在XML中指定该启动模式相同。FLAG_ACTIVITY_SINGLE_TOP这个标记位的作用是为Activity指定“singleTop”启动模式,其效果和在XML中...原创 2020-03-15 17:29:24 · 159 阅读 · 0 评论 -
Android开发常用命令
adb shell dumpsys activity:获取activity信息原创 2020-03-15 17:16:20 · 77 阅读 · 0 评论 -
理解TaskAffinity
TaskAffinity,可以翻译为任务相关性。这个参数标识了一个Activity所需要的任务栈的名字,默认情况下,所有Activity所需的任务栈的名字为应用的包名。当然,我们可以为每个Activity都单独指定TaskAffinity属性,这个属性值必须不能和包名相同,否则就相当于没有指定。TaskAffinity属性主要和singleTask启动模式或者allowTaskReparent...原创 2020-03-15 17:07:05 · 325 阅读 · 0 评论 -
Activity onNewIntent详解
onNewIntent() 的触发时间:onNewIntent.png如图所示,onCreate() 和 onNewIntent() 不会被同时调用。官方文档:onNewIntent·added in API level 1·void onNewIntent (Intent intent)·This is called for activities that set la...转载 2020-03-15 16:44:24 · 249 阅读 · 0 评论 -
Android 面试题之activity的启动流程
简要说明:启动activity的请求会有Instrumentation来处理,然后它通过Binder向AMS发请求,AMS内部维护这一个ActivityStack并负责栈内的activity的状态同步,AMS通过ActivityThread去同步activity的状态从而完成生命周期方法的调用...原创 2020-03-15 14:57:33 · 772 阅读 · 0 评论 -
Activity生命周期剖析(一)
Activity生命周期切换的过程:第一次启动activityoncreate ⇒ onstart ⇒ onresume activity处于运行状态。activity被覆盖一部分(类似dialog),然后activity全部显示执行onPause,之后执行onResume按Home键,隐藏之后重新显示onPause ⇒ onStop ⇒ 重新显示 ⇒ onRestart ...原创 2020-03-15 14:54:32 · 131 阅读 · 0 评论 -
Android内存泄漏工具之MAT
一 准备MAT工具地址:http://www.eclipse.org/mat/downloads.php对于Eclipse来说,MAT也有插件版,但是不建议使用插件版,因为独立版使用起来更加方便,即使不安装Eclipse也可以正常使用,当然前提是有内存分析后的hprof文件二 如何导出hprof文件点击profile app-->dump java heap---expor...原创 2020-03-13 17:42:19 · 93 阅读 · 0 评论 -
Android性能优化
OOM:过多的使用内存导致程序内存溢出ANR:过多的使用CPU资源,一般指做大量的耗时任务,导致手机变得卡顿甚至出现程序无法响应的情况优化的内容如下:...原创 2020-03-13 11:39:05 · 117 阅读 · 0 评论 -
Android之ANR分析
一 ANR简介ANR和crash的区别:ANR不一定是由于程序的异常错误导致的,一般是应用处理长时间没有响应导致主线程不能处理下一件事情ANR(Application not responding)即应用无响应,应用发生anr的几种类型1 KeyDispatchTimeout:最常见的anr类型是对输入事件5s内无响应,比如按键或触摸事件在此时间内无响应2 Broadcast...原创 2020-03-11 10:33:31 · 2285 阅读 · 1 评论 -
private 访问权限和protect 访问权限, 子类继承父类的时候注意点(面试题)
如果是private的话, 子类是不可以直接使用的必须通过get方法去获取如果是protect的话,子类可以直接获取这个变量class Fu{ protected String number; private String name; public String getNumber() { return number; }}...转载 2020-03-10 16:14:15 · 781 阅读 · 1 评论 -
list set map的区别,去重用哪一个?(面试题)
list set map的区别,去重用哪一个?(面试题)插入有序null重复排序索引/增删键值对Collection结构图collection里面有什么子类?list和set是实现了collection接口的List:1.可以允许重复的对象。2.可以插入多个null元素。3.是一个有序容器,保持了每个元素的插入顺序,输出的顺序就是插入的顺序。...转载 2020-03-10 16:12:03 · 359 阅读 · 0 评论 -
Activity托管UI fragment的两种方式
1 在activity布局中添加fragment即布局fragment,在activity布局中添加fragment,等同于将fragment及其视图与activity的视图绑定在一起,并且在activity的生命周期过程中,无法替换fragment视图,这种方式简单但不灵活2 在activity代码中添加fragment动态控制fragment的方式,这种方式可以随时添加,移除,替换...原创 2020-03-10 11:48:59 · 404 阅读 · 0 评论 -
Fragment的生周期
fragment生命周期与activity生命周期的一个关键区别是fragment的生命周期方法由托管activity而不是操作系统调用。操作系统不关心activity用来管理视图的fragment。fragment的使用是activity内部的事情...原创 2020-03-09 22:15:25 · 56 阅读 · 0 评论 -
Android调试中定位问题的方法
1 记录堆栈跟着的诊断性日志Log.d("hcx", "onClick: ",new Throwable());//打一个堆栈信息2 利用调试器设置断点调试3 Android Lint静态分析器,能深入检查代码,找出编译器无法发现的问题...原创 2020-03-09 17:47:09 · 270 阅读 · 0 评论 -
Activity的状态图解
可能出现部分可见暂停状态的场景:在一个activity之上启动带透明背景视图或者小于屏幕尺寸视图的新activity时可能出现完全可见暂停状态的场景:应用多窗口模式下,当前activity在一个窗口完全可见,而用户在不包含当前activity的另一个窗口操作时...原创 2020-03-09 17:03:41 · 163 阅读 · 0 评论 -
Android与MVC设计模式
MVC设计模式表明,应用的任何对象,归根结底都属于模型对象、视图对象、及控制器对象中的一种模型对象存储着应用的数据和业务逻辑。模型类通常用来映射与应用相关的一些事物,如用户、商店里的商品、服务器上面的视频或者一段电视节目。模型对象不关心用户界面,它为存储和管理应用数据而生。android应用里,模型类通常就是我们创建的定制类,应用的全部模型对象组成了模型层视图对象知道如何在屏幕上绘制自...原创 2020-03-09 16:19:58 · 172 阅读 · 0 评论 -
Activity的启动模式之singleInstance模式
activity会启动一个新的任务栈来管理这个activity,singleInstance模式加载activity时,无聊从哪个任务栈中启动该activity,只会创建一个activity实例,并且会使用一个全新的任务栈来装载该activity实例与singleTask区别:单独为该activity启动了一个新的任务栈来管理点击第一个按钮点击第二个按钮...原创 2020-03-09 12:22:20 · 9289 阅读 · 0 评论 -
Activity的启动模式之singleTask模式
Activity在整个应用程序中只存在一个实例,每次启动该activity时,系统首先会检查栈中是否存在该活动的实例,如果发现已经存在则直接使用该实例,并将当前activity之上的所有activity出栈,如果没有发现则创建一个新的实例点击mainActivity按钮,再点击BAty按钮 ,mainActivity只存在一个,而且点击back键后直接退出...原创 2020-03-09 12:15:36 · 472 阅读 · 0 评论 -
Activity的启动模式之singleTop模式
当启动的activity以及位于栈顶时,则直接使用它不创建新的实例,如果启动的activity没有位于栈顶时,则创建一个新的实例位于栈顶实例:这个是mainActivityBActivity运行结果启动mainActivity时,只有一个实例...原创 2020-03-09 12:08:01 · 728 阅读 · 0 评论 -
Activity的启动模式之standard模式
standard模式:standard是activity默认的启动模式,不指定启动模式时,所有activity使用的都是standard模式每当启动一个新的activity,它就会进入任务栈,并处于栈顶的位置,对于使用standard模式的activity,系统不会判断该activity在栈中是否存在,每次都会创建一个新的实例看看下面的实例来理解standard模式运...原创 2020-03-09 09:36:15 · 1417 阅读 · 0 评论 -
Android消息机制的原理图
从流程图上面理解消息机制原创 2020-03-07 17:25:25 · 114 阅读 · 0 评论 -
Android性能优化之绘制优化
1 卡顿主要场景这四种卡顿场景可以归纳为两类界面绘制:主要原因是绘制的层级深、页面复杂、刷新不合理,由于这些原因导致的卡顿的场景更多出现在UI和启动后的初始界面以及跳转到页面的绘制上数据处理:导致这种卡顿的主要原因是数据处理量太大,分如下三种情况1 数据处理在UI线程2 数据处理占用CPU高,导致主线程拿不到时间片3 内存增加导致GC频繁,从而卡顿2 Android...原创 2020-03-07 17:18:54 · 155 阅读 · 0 评论 -
Android studio使用小技巧
1 内容补全--ctrl+shift+enter2 列选择--可以选择列块,按住alt键选择代码块3 代码补全--使用enter键补全对原来的代码不做任何操作;使用tab键补全会删除后面的代码4 查看方法的调用路径:ctrl+alt+h5 预览某个方法或者类的实现:ctrl+shift+i6 快速使用命令:ctrl+shift+a...原创 2020-03-07 12:20:07 · 88 阅读 · 0 评论 -
Android UI开发之-相对布局
1 布局的类型1.1 相对布局(RelativeLayout)默认采用相对布局,通常有两种形式,一种是相对于容器而言,一种是相对于控件而言。其属性如下android:layout_alignParentLeft--是否跟父布局左对齐layout_alignParentTop--是否跟父布局顶部对齐layout_alignParentRight--是否跟父布局右对齐layo...原创 2020-03-07 11:08:12 · 607 阅读 · 0 评论 -
面试之Fragment与activity交互
1、在Fragment中调用Activity中的方法:fragment可以通过getActivity()方法来获得activity的实例,然后就可以调用一些findViewById之类的方法。例如View listView = getActivity().findViewById(R.id.list);注:调用getActivity()时,fragment必须和activity关联(attac...原创 2020-03-06 15:48:52 · 283 阅读 · 0 评论 -
面试之Fragment与activity通信
activity—> fragment:在activity中创建Bundle数据包,并调用fragment的setArguments(Bundle bundle)方法fragment—> activity:需要在fragment中定义一个内部回调接口,再让包含该fragment的activity实现该回调接口,这样fragment可调用该回调方法将数据传递给activity...原创 2020-03-06 15:47:48 · 139 阅读 · 0 评论 -
初识fragment(一)
1.1 frament简介是一种可以嵌入在activity中的UI片段,提供动态的多窗口的交互体验,可以让程序更加合理地利用大屏幕的空间静态使用动态使用V4包下使用1.2 frament的静态使用1)创建子类继承fragment2)重写onCreateView()方法,该方法主要定义fragment的布局,以view的形式返回fragment的视图3)将fragment引入到ac...原创 2020-03-06 11:52:21 · 158 阅读 · 1 评论