- 博客(56)
- 资源 (3)
- 收藏
- 关注

原创 黄池行简历技术点解析版
9年Android系统开发经验,主导完成5个十万+级设备系统框架项目,系统启动速度提升20%,产品崩溃率降低70%、熟悉Framework核心服务开发,主导重构系统服务层代码超1万行,代码执行效率提升30%+,擅长通过sy strace、perfetto、profiler等工具分析内存泄漏、线程治理,突破性能瓶颈。对于双屏异显场景,确保主屏与副屏的渲染任务分离在不同线程中执行,利用 RenderThread(从 Android 5.0 引入)优化 GPU 命令的执行,避免因主线程繁忙而延误副屏更新。
2025-03-22 11:25:20
744

原创 常见Android面试问题汇总--持续更新
1 handler的机制2 view事件分发流程3 自定义view流程4 listview和recyclerview区别,优缺点5 常见的设计模式6 activity的启动流程7 卡顿问题如何处理8
2020-04-04 09:57:45
130
1

原创 Android基础知识面试技术点汇总
activity1 fragment以及与activity交互(1)通过Bundle传参,从而实现Fragment之间的数据交互(2)通过在Fragment内部定义一个回调接口,并需要宿主Activity实现它。当Activity通过接口接收到回调时,可以在必要时与布局中的其它Fagment共享信息2 Activity生命周期与启动模式1.onCreate() 这个方法...
2020-03-07 17:22:05
83
1
原创 Android ServiceManager分析
一 作用1 服务进程,是Android系统中的核心服务之一2 系统服务管理:管理系统和应用向系统添加的服务3 查询获取服务管理:响应client请求并返回相应的服务二 理解ServiceManager1 根据init脚本定义:如果该服务连续几次异常退出,系统会重启2 如果该服务重启,那么他将会重启media,zygote,surfaceflinger等服务3 系统...
2020-04-13 14:51:15
870
1
原创 Android packageManagerService分析
一 作用1 管理系统的jar包和apk,负责系统权限2 负责程序的安装,卸载,更新,解析3 对于其他应用和服务提供安装卸载服务二 PMS涉及到的模块三 PMS的启动过程1 和installd进行连接,进行安装卸载操作2 创建PackageHandler线程,处理外部安装卸载请求3 处理系统权限相关的文件/system/etc/perssion/*.xml...
2020-04-13 11:49:11
414
原创 Android系统异常问题处理流程(死机,重启等)
1 addr2line工具作用:把native的出错堆栈信息对应到代码的行数通过find . -name *addr2line来搜索这个工具查看出错的堆栈信息,xx.so库出问题,然后分析这个库的堆栈信息根据出错的二进制地址和出错的库名就可以使用addr2line找出错误的行数命令:addr2line /xx.so 0015b6d5然后回车然后继续看错误堆栈...
2020-03-25 14:35:37
1209
1
原创 简述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
5637
1
原创 理解PackageManager
PackageManager是Android为管理应用程序安装包(apk)提供的包管理器它的功能如下:1 权限处理,包括对系统和应用定义的Permission和Permission Group信息的添加、删除、查询和检查2 包处理,包括扫描并安装和卸载apk包,查询包的UID、GID、包名、系统默认程序等信息3 比较两个包的signatures信息是否相同4 查询Activi...
2020-03-21 11:09:54
1458
原创 WMS的重要成员以及Window添加和删除过程
1 mPolicy:WindowManagerPolicymPolicy是WindowManagerPolicy类型的变量。WindowManagerPolicy是窗口管理策略的接口类,用来定义一个窗口策略所要遵循的通用规范,并提供了WindowManager所有的特定的UI行为。它的具体实现类为PhoneWindowManager,这个实现类在WMS创建时被调用。 WMP运行定制窗口层级和特...
2020-03-20 18:17:38
353
原创 理解WindowManagerService
一 WMS的职责1 窗口管理WMS是窗口的管理者,它复杂窗口的启动、添加和删除,另外窗口的大小和层级也是由WMS进行管理的窗口管理的核心成员有DisplayContent、WindowToken和WindowState2 窗口动画窗口间进行切换时,使用窗口动画更炫一些,窗口动画由WMS的动画子系统来负责,动画子系统的管理者为WindowAnimator3 输入系统的中转站...
2020-03-20 12:14:59
171
原创 Android系统启动流程
一 init 进程启动过程 init0进程是Android系统中用户空间的第一个进程,进程号为1,它的职责包括创建Zygote(孵化器)和属性服务等。init进程是由多个源文件共同组成的,这些文件位于system/core/init中按下启动电源时,系统启动会加载引导程序,引导程序又启动linux内核,在Linux内核加载完成后,第一件事就是启动init进程 ...
2020-03-18 18:21:21
147
原创 AMS重要的数据结构
ActivityRecord内部存储了activity所有信息,包括AMS的引用、AndroidManifes节点信息、activity状态、activity资源信息和activity进程相关信息,其中含有该AcitivityRecord所在的TaskRecord,这就将ActivityRecord和TaskRecord关联在一起了 名称 类型 ...
2020-03-16 23:40:59
437
原创 Android开发书籍推荐
入门级:第一行代码Android编程权威指南进阶:《Android开发艺术探索》《Android进阶解密》《Android群英传》《Android进阶之光》源码方面:《Android源码设计模式》《深入理解Android内核设计思想》《深入理解Android》卷1,2,3《Android系统源代码情景分析》...
2020-03-16 22:48:12
313
原创 深入理解Android AMS
在activity的启动过程中会调用Instrumentation的execStartActivity方法:涉及代码:Instrumentation.java core\java\android\app\Instrumentation.java这里调用到了ActivityManager的getService方法:ActivityTaskManager.java c...
2020-03-16 21:22:34
530
原创 Android的消息机制
MessageQueue: 消息队列,消息的存储单元,它的内部存储了一组消息,以队列的形式对外提供插入和删除的工作。虽然叫消息队列,但是它的内部存储结构并不是真正的队列,而是采用单链表的数据结构来存储消息列表。Looper:消息循环,由于MessageQueue只是一个消息的存储单元,它不能处理消息,而Looper就填补了这个功能,Looper会以无限循环的形式去查找是否有新消息,如果有的话就...
2020-03-16 11:28:30
125
原创 Activity的Flags
在使用标记位的时候,要注意有些标记位是系统内部使用的,应用程序不需要去手动设置这些标记位以防出现问题。FLAG_ACTIVITY_NEW_TASK这个标记位的作用是为Activity指定“singleTask”启动模式,其效果和在XML中指定该启动模式相同。FLAG_ACTIVITY_SINGLE_TOP这个标记位的作用是为Activity指定“singleTop”启动模式,其效果和在XML中...
2020-03-15 17:29:24
203
原创 理解TaskAffinity
TaskAffinity,可以翻译为任务相关性。这个参数标识了一个Activity所需要的任务栈的名字,默认情况下,所有Activity所需的任务栈的名字为应用的包名。当然,我们可以为每个Activity都单独指定TaskAffinity属性,这个属性值必须不能和包名相同,否则就相当于没有指定。TaskAffinity属性主要和singleTask启动模式或者allowTaskReparent...
2020-03-15 17:07:05
397
转载 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
303
原创 Activity生命周期剖析(一)
Activity生命周期切换的过程:第一次启动activityoncreate ⇒ onstart ⇒ onresume activity处于运行状态。activity被覆盖一部分(类似dialog),然后activity全部显示执行onPause,之后执行onResume按Home键,隐藏之后重新显示onPause ⇒ onStop ⇒ 重新显示 ⇒ onRestart ...
2020-03-15 14:54:32
199
原创 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
123
原创 Android性能优化
OOM:过多的使用内存导致程序内存溢出ANR:过多的使用CPU资源,一般指做大量的耗时任务,导致手机变得卡顿甚至出现程序无法响应的情况优化的内容如下:...
2020-03-13 11:39:05
145
原创 Android之ANR分析
一 ANR简介ANR和crash的区别:ANR不一定是由于程序的异常错误导致的,一般是应用处理长时间没有响应导致主线程不能处理下一件事情ANR(Application not responding)即应用无响应,应用发生anr的几种类型1 KeyDispatchTimeout:最常见的anr类型是对输入事件5s内无响应,比如按键或触摸事件在此时间内无响应2 Broadcast...
2020-03-11 10:33:31
2649
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
817
1
转载 list set map的区别,去重用哪一个?(面试题)
list set map的区别,去重用哪一个?(面试题)插入有序null重复排序索引/增删键值对Collection结构图collection里面有什么子类?list和set是实现了collection接口的List:1.可以允许重复的对象。2.可以插入多个null元素。3.是一个有序容器,保持了每个元素的插入顺序,输出的顺序就是插入的顺序。...
2020-03-10 16:12:03
395
转载 Java中静态变量和实例变量的区别
静态变量属于类的级别,而实例变量属于对象的级别。主要区别有两点:1,存放位置不同 类变量随着类的加载存在于方法区中,实例变量随着对象的对象的建立存在于堆内存中。2,生命周期不同 类变量的生命周期最长,随着类的加载而加载,随着类的消失而消失, 实例变量随着对象的消失而消失。静态的使用注意事项:1,静态方法只能访问静态成员(包括成员变量和成员方法),不能访问非静态...
2020-03-10 15:52:10
171
原创 Activity托管UI fragment的两种方式
1 在activity布局中添加fragment即布局fragment,在activity布局中添加fragment,等同于将fragment及其视图与activity的视图绑定在一起,并且在activity的生命周期过程中,无法替换fragment视图,这种方式简单但不灵活2 在activity代码中添加fragment动态控制fragment的方式,这种方式可以随时添加,移除,替换...
2020-03-10 11:48:59
445
原创 Fragment的生周期
fragment生命周期与activity生命周期的一个关键区别是fragment的生命周期方法由托管activity而不是操作系统调用。操作系统不关心activity用来管理视图的fragment。fragment的使用是activity内部的事情...
2020-03-09 22:15:25
83
原创 Android调试中定位问题的方法
1 记录堆栈跟着的诊断性日志Log.d("hcx", "onClick: ",new Throwable());//打一个堆栈信息2 利用调试器设置断点调试3 Android Lint静态分析器,能深入检查代码,找出编译器无法发现的问题...
2020-03-09 17:47:09
327
原创 Activity的状态图解
可能出现部分可见暂停状态的场景:在一个activity之上启动带透明背景视图或者小于屏幕尺寸视图的新activity时可能出现完全可见暂停状态的场景:应用多窗口模式下,当前activity在一个窗口完全可见,而用户在不包含当前activity的另一个窗口操作时...
2020-03-09 17:03:41
193
原创 Android与MVC设计模式
MVC设计模式表明,应用的任何对象,归根结底都属于模型对象、视图对象、及控制器对象中的一种模型对象存储着应用的数据和业务逻辑。模型类通常用来映射与应用相关的一些事物,如用户、商店里的商品、服务器上面的视频或者一段电视节目。模型对象不关心用户界面,它为存储和管理应用数据而生。android应用里,模型类通常就是我们创建的定制类,应用的全部模型对象组成了模型层视图对象知道如何在屏幕上绘制自...
2020-03-09 16:19:58
227
原创 Activity的启动模式之singleInstance模式
activity会启动一个新的任务栈来管理这个activity,singleInstance模式加载activity时,无聊从哪个任务栈中启动该activity,只会创建一个activity实例,并且会使用一个全新的任务栈来装载该activity实例与singleTask区别:单独为该activity启动了一个新的任务栈来管理点击第一个按钮点击第二个按钮...
2020-03-09 12:22:20
9404
原创 Activity的启动模式之singleTask模式
Activity在整个应用程序中只存在一个实例,每次启动该activity时,系统首先会检查栈中是否存在该活动的实例,如果发现已经存在则直接使用该实例,并将当前activity之上的所有activity出栈,如果没有发现则创建一个新的实例点击mainActivity按钮,再点击BAty按钮 ,mainActivity只存在一个,而且点击back键后直接退出...
2020-03-09 12:15:36
552
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人