- 博客(44)
- 收藏
- 关注
原创 是时候让 Android Tools 属性拯救你了
原文链接: 是时候让 Android Tools 属性拯救你了 日常开发过程中,我们都会遇到这样一种场景:我们写出的 UI 效果在对接数据之前需要提前进行预览,进而调整 UI 细节和排版问题。 我们一般的做法是什么样的?如果存在像 TextView 或者 ImageView 这种基础控件,你是不是还在通过诸如 android:text=“xxx” 和 android:src="@drawable/...
2019-09-02 15:21:36
373
原创 Android NDK编译
记录下ndk如何编译.so文件 按部就班的说下: 首先下载NDK,这个我是直接在Android studio里面下载的,也没去官网下载,下载好了,就是配置环境变量了,因为我是从Android studio里面下载的,所以就直接在path中配置D:android_sdk/ndk-bundle这个路径了,配好了后我们可以用ndk-build去cmd命令台检测下看下是否配置成功 接下来就是在Androi...
2019-08-18 21:59:44
906
原创 一篇文章搞懂Android组件化
网上组件化的文章很多,我本人学习组建化的过程也借鉴了网上先辈们的文章。但大多数文章都从底层的细枝末节开始讲述,由下而上给人一种这门技术“博大精深”望而生畏的感觉。而我写这篇文章的初衷就是由上而下,希望别人在阅读的过程中能够觉得“组件化原来也就是这几个东西”的感觉。 首先我们来看一下组件化项目和传统项目的区别 在传统的项目里 我们通常情况下会有一个commonLib的Libary模块和一个app的a...
2019-08-15 10:26:47
293
原创 痴人说梦?来看看程序员究竟是如何做到年薪 50 万的?
我比较了解Android这块,我就直接从Android的角度出发吧。 至于说转管理的事,忽略了,程序员转管理肯定是可取的,但是本文只从技术的角度来说一个程序员如何做到年薪50万。(Ps:略长,相信可以给看完的朋友一点帮助) 一个Android程序员达到年薪50万的同时,他也是一名架构师了。(这里防杠一下:月薪是月薪,年薪是年薪,月薪1w一定比年薪12w要高,原因有:年底多薪、年终奖以及各种福利待遇...
2019-08-14 14:40:57
286
原创 Android热修复技术原理详解(最新最全版本)
本文框架 什么是热修复? 热修复框架分类 技术原理及特点 Tinker框架解析 各框架对比图 总结 通过阅读本文,你会对热修复技术有更深的认知,本文会列出各类框架的优缺点以及技术原理,文章末尾简单描述一下Tinker的框架结构。 一、什么是热修复? 正常开发流程 热修复开发流程 热修复优势 修复什么? 二、热修复框架分类 现状:百花齐放百家争鸣 简单分类 更合理的分类 三、技术原...
2019-08-13 17:51:37
354
原创 2019年“金九银十”剑指BATJ,来自高级Android工程师的面试分享
“金九银十” 每年到了9、10月份,一方面正是各大企业为第二年拓展业务而大量吸纳人才的关键时期,招聘需求集中、空缺岗位多,另一方面用人单位习惯在初秋进行大规模招聘,正好可以避过盛夏的酷暑,因此可以说是招聘旺季。 这个时间又刚好遇上应届高校毕业生要找工作,同时,已就业者想跳槽找寻更理想的工作,造成了每年该季度人才流动的高峰,因此可以说是求职旺季。 供需两旺,因故称之为人才市场的“金九银十”。 而随...
2019-08-12 14:42:20
233
原创 剑指金九银十:Android程序员面试季千万不要在基础知识点挂了
前言 金九银十即将到来,但很多人面试之前,可能没有在互联网公司工作过或者说工作过但年头较短,不知道互联网公司技术面试都会问哪些问题? 再加上可能自己准备也不充分,去面试没几个回合就被面试官几个问题打蒙了,最后以惨败收场。 下述是我收录整理的Android面试题汇总,由于篇幅原因,在这只把基础知识点部分的题目列举出来,后续还会更新其余面试题内容,大家可以关注一下我,及时知晓我的更新,同时这份面试集...
2019-08-10 13:38:16
189
原创 备战金九银十:Android 40道最常见的原理性面试题及答案分享
前言 金九银十即将到来,但很多人面试之前,可能没有在互联网公司工作过或者说工作过但年头较短,不知道互联网公司技术面试都会问哪些问题? 再加上可能自己准备也不充分,去面试没几个回合就被面试官几个问题打蒙了,最后以惨败收场。 下述是我收录整理的Android面试题汇总,由于篇幅原因,在这只把常见原理性面试题的题目列举出来,后续还会更新其余面试题内容,大家可以关注一下我,及时知晓我的更新,同时这份面试...
2019-08-07 15:20:08
197
原创 如何成为一名Android架构师,乃至高级架构师?这有完整进阶路线
很多Android的小伙伴在做了多年的开发之后,始终搞不清楚达到Android架构师需要何种技能,我们对比着Android高级工程师来说明。 我们先来看一下Android高级工程师的招聘要求 职位描述: Responsibility(岗位职责) Android平台功能模块的设计与开发 移动端开发框架的研究与设计 移动端技术规范的制定与推广 移动端技术培训 Requirements(岗位要求)...
2019-07-28 21:55:09
403
原创 Android:Handler中的Idle Handler
[Android] Handler中的IdleHandler 抛出 Handler中的IdleHandler 它有什么能力? 它有什么用处? 能想到一些合适的场景吗? Answer1: 首先看下源码的注释 /** * Callback interface for discovering when a thread is going to block * waiting ...
2019-07-25 20:54:08
1635
转载 Android:手把手带你入门跨平台UI开发框架Flutter
前言 Flutter 作为Google出品的一个新兴的跨平台移动客户端UI开发框架,正在被越来越多的开发者和组织使用,包括阿里的咸鱼、腾讯的微信等。 今天,我将献上一份 《全面 & 详细的Flutter学习指南》,希望你们会喜欢。 目录 1. 简介 定义:一款Google出品&开源的移动客户端UI开发框架(SDK) 作用:用一套代码同时在Android、iOS上...
2019-07-25 17:07:20
441
原创 Android性能调优:几种常用界面切换效果
Activity的切换动画指的是从一个activity跳转到另外一个activity时的动画。 它包括两个部分: 一部分是第一个activity退出时的动画; 另外一部分时第二个activity进入时的动画; 在Android的2.0版本之后,有了一个函数来帮我们实现这个动画。这个函数就是overridePendingTransition @Override public void onCreat...
2019-07-24 19:39:00
2706
1
原创 前Google技术主管:程序员五大雷区,请你一定要避开
软件工程师的技能发展都会经历一个自然的过程——经验从无到有,最后变成老手。而一旦到了经验丰富的阶段,他们对代码就不那么感兴趣了。恰恰相反,他们会把更多的精力放在文件设计和代码重构上。 奇怪的是,不管任职于哪家公司,大多数经验丰富的工程师都会表现出同样的特点。他们缺乏对代码的关注,和其他工程师相比,他们写代码的速度较慢。这是因为和仅仅编写代码相比,他们会将更多的时间花在设计上面。 从一个新手到经验...
2019-07-22 21:52:21
270
原创 图文详解Android Handler通信机制的工作原理
前言 在Android开发的多线程应用场景中,Handler机制十分常用 本文就图文详解一下 Handler机制 的工作原理 目录 1. 定义 一套 Android 消息传递机制 2. 作用 在多线程的应用场景中,将工作线程中需更新UI的操作信息 传递到 UI主线程,从而实现 工作线程对UI的更新处理,最终实现异步消息的处理 3. 为什么要用 Handler消息传递机制 ...
2019-07-19 21:25:22
6685
1
原创 史上最全的Android常规知识点面试题集锦
前言 很多人面试之前,可能没有在互联网公司工作过或者说工作过但年头较短,不知道互联网公司技术面试都会问哪些问题? 再加上可能自己准备也不充分,去面试没几个回合就被面试官几个问题打蒙了,最后以惨败收场。下述是我整理的Android常规知识点面试题汇总,另外还有整理出架构师技术脑图和Android面试专题文档免费分享给大家! 由于篇幅原因,在这只把部分的题目列举出来,后续还会更新其余面试题内容,大家可...
2019-07-17 22:03:17
556
原创 性能优化:Android App启动速度优化
一、App启动分类 1.冷启动 Cold start 在启动应用前,系统还没有App的任何进程。比如设备开机后应用的第一次启动,系统杀掉应用进程 (如:系统内存吃紧引发的 kill 和 用户主动产生的 kill) 后 的再次启动等。那么自然这种方式下,应用的启动时间最长。 2.热启动 Warm start 当应用中的 Activities 被销毁,但在内存中常驻时,应用的启动方式就会变为暖启动。相...
2019-07-16 20:36:13
779
原创 Android:Profiler
Android studio的分析工具分为:CPU、Memory、NetWork、Energy. CPU Profiler: 从Android profiler面板选择指定设备和应用程序进入到CPU Profiler界面,我们能够直观的看到CPU的使用情况和线程的情况. 分别介绍下相关标号的CPU Profiler的相关功能: **1.**事件时间轴:表示当前分析的应用程序随着用户交互在不同活动...
2019-07-13 22:14:28
1057
原创 ViewPager的坑
前言 做程序开发,基础很重要。同样是拧螺丝人家拧出来的可以经久不坏,你拧出来的遇到点风浪就开始颤抖,可见基本功的重要性。此系列,专门收录一些看似基础,但是没那么简单的小细节,同时提供权威解决方案。喜欢的同志们点个赞就是对我最大的鼓励!先行谢过! 网上可能有一些其他文章,提供了解决方案,但是要么就是没有提供可运行demo,要么就是demo不够纯粹,让人探索起来受到其他代码因素的影响,无法专注于当...
2019-07-12 17:54:38
631
原创 Android性能优化-如何避免过度渲染?
1)Why Rendering Performance Matters 现在有不少App为了达到很华丽的视觉效果,会需要在界面上层叠很多的视图组件,但是这会很容易引起性能问题。如何平衡Design与Performance就很需要智慧了。 2)Defining ‘Jank’ 大多数手机的屏幕刷新频率是60hz,如果在1000/60=16.67ms内没有办法把这一帧的任务执行完毕,就会发生丢帧的现象。...
2019-07-09 22:20:38
690
原创 Android程序员详解:Handler机制
Handler在我们日常开发中会经常用到,它主要用于处理异步消息,当发出一个消息之后,首先进入到一个消息队列,发送消息的函数即可返回,而另外一个部分在消息队列中逐一取出,然后对消息进行处理。 虽然经常用到它,但是用的方式不正确也会产生一些问题,下面先来了解一些Handler相关的问题并解决 Handler造成内存泄漏 Andorid中一般都是在子线程中执行耗时的业务逻辑,然后通过Handler发从...
2019-07-08 21:21:28
485
原创 Android OOM 分析
前言 在内存使用过程中使用不当或者超过heap size limit的时候就会出现OOM,那一般OOM 是怎么产生的,会导致什么样的结果呢? OOM简介 OOM全称为Out of memory,解释为内存溢出。 为了整个Android系统的内存控制需要,Android系统为每一个应用程序都设置了一个硬性的Dalvik Heap Size最大限制阈值,这个阈值在不同的设备上会因为RAM大小不同而各...
2019-07-08 15:27:25
1083
原创 Android:序列化总结
前言 公园里,一位仙风鹤骨的老者在打太极,一招一式都仙气十足,一个年轻人走过去:“大爷,太极这玩意儿花拳绣腿,你练它干啥?”老者淡淡一笑:“年轻人,你还没有领悟到太极的真谛,这样,你用最大力气打我试试。”于是年轻人用力打了老头一拳,被讹了八万六。 从段子就能看出来,今天这篇博客又是一碗炒冷饭。序列化使用很简单,但是其中的一些细节并不是所有人都清楚。在日常的应用开发中,我们可能需要让某些对象离开内存...
2019-07-04 15:45:59
234
原创 十年Android程序员:探索Android CameraX
如果你曾经用过 Android 的 Camera APIs,你可能已经感受到了,它们一直没有成为最容易实现的东西。最开始是 Camera API,然后又推荐使用 Camera2 API — 这个升级是为了让开发者在使用 Android 的相机 API 时有更好的体验。然而,使用相机的 API (即使是最简单的使用)时还是会有很多脏代码,而且,在 Android 应用中要实现 Camera 功能时...
2019-07-04 14:25:31
964
原创 Android:反射机制(二)
案例演示反射 Person类 /** * kaivens */ public class Person { private int age; private String name; public Person(){ } public Person(int age, String name){ this.age = age; this.name = name; } publ...
2019-07-01 21:58:09
247
原创 Android:反射机制(一)
什么是反射机制? JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制(注意关键词:运行状态)换句话说,Java程序可以加载一个运行时才得知名称的class,获悉其完整构造(但不包括methods定义),并生成其对象实体、或对其fields设值、...
2019-07-01 21:56:21
207
原创 Android窗口管理分析(1):View如何绘制到屏幕上的主观理解
窗口管理可以说是Android系统中最复杂的一部分,主要是它涉及的模块比较多,虽然笼统的说是窗口管理,其实,除了WindowManagerService还包括SurfaceFlinger服务、Linux的共享内存及tmpfs文件系统、Binder通信、InputManagerService、动画、VSYNC同步技术等,一篇文章不可能分析完全,但是可以首先对于窗口的显示与管理有一个大概的轮廓,再分块...
2019-06-25 15:42:08
443
原创 全屏、沉浸式、fitSystemWindow使用及原理分析:全方位控制“沉浸式”的实现
目录 状体栏颜色设置原理与导航栏颜色设置原理 fitSystemWindow全屏及WindowInsets消费原 fitSystemWindow与padding不同层级的消费 Theme中window属性配置影响 SystemUi及状体栏添加原理 前言 状态栏与导航栏属于SystemUi的管理范畴,虽然界面的UI会受到SystemUi的影响,但是,APP并没有直接绘制SystemUI的权限与必...
2019-06-25 15:34:28
754
原创 Android Handler与Looper原理浅析
本文分析下Android的消息处理机制,主要是针对Handler、Looper、MessageQueue组成的异步消息处理模型,先主观想一下这个模型需要的材料: 消息队列:通过Handler发送的消息并是即刻执行的,因此需要一个队列来维护 工作线程:需要一个线程不断摘取消息,并执行回调,这种线程就是Looper线程 互斥机制,会有不同的线程向同一个消息队列插入消息,这个时候就需要同步机制进行保证...
2019-06-25 15:26:37
267
原创 从Toast显示原理初窥Android窗口管理
Android窗口管理系统是非常大的一块,涉及AMS、InputManagerService、输入法管理等,这么复杂的一个系统,如果直接扎进入分析看源码可能会比较混乱,所以,本文以Toast显示原理作为切入点,希望能简单点初窥一下WMS。首先,简单看下Toast用法: Context context = getApplicationContext(); CharSequence text = "H...
2019-06-25 15:22:39
347
原创 三句代码创建全屏Dialog或者DialogFragment:带你从源码角度实现
Dialog是APP开发中常用的控件,同Activity类似,拥有独立的Window窗口,但是Dialog跟Activity还是有一定区别的,最明显的就是:默认情况下Dialog不是全屏的,所以布局实现不如Activity舒服,比如顶部对齐,底部对齐、边距、宽度、高度等。如果将Dialog定义成全屏的就会省去很多问题,可以完全按照常用的布局方式来处理。网上实现方式有不少,一般情况下也都能奏效,不过...
2019-06-24 13:44:26
403
原创 Android进程保活 - 自“裁”或者耍流氓(二)
通过“流氓”手段提高oom_adj,降低被杀风险,化身流氓进程 进程优先级的计算Android是有自己的一条准则的,某些特殊场景的需要额外处理进程的oom_adj Android也是给了参考方案的。但是,那对于流氓来说,并没有任何约束效力。 "流氓"仍然能够参照oom_adj(优先级)的计算规则,利用其漏洞,提高进程的oom_adj,以降低被杀的风险。如果单单降低被杀风险还好,就怕那种即不想死,又...
2019-06-24 11:43:39
651
原创 Android进程保活 - 自“裁”或者耍流氓(一)
本篇文章是后台杀死系列的最后一篇,主要探讨一下进程的保活,Android本身设计的时候是非常善良的,它希望进程在不可见或者其他一些场景下APP要懂得主动释放,可是Android低估了”贪婪“,尤其是很多国产APP,只希望索取来提高自己的性能,不管其他APP或者系统的死活,导致了很严重的资源浪费,这也是Android被iOS诟病的最大原因。本文的保活手段也分两种:遵纪守法的进程保活与流氓手段换来的...
2019-06-24 11:41:31
363
原创 Android后台Kill(四):Binder讣告原理
Binder是一个类似于C/S架构的通信框架,有时候客户端可能想知道服务端的状态,比如服务端如果挂了,客户端希望能及时的被通知到,而不是等到再起请求服务端的时候才知道,这种场景其实在互为C/S的时候最常用,比如AMS与APP,当APP端进程异常退出的时候,AMS希望能及时知道,不仅仅是清理APP端在AMS中的一些信息,比如ActivityRecord,ServiceRecord等,有时候可能还需要...
2019-06-24 11:29:48
704
原创 听说你Binder机制学的不错?来面试下这几个问题(三)
很多文章将Binder框架定义了四个角色:Server,Client,ServiceManager、以及Binder驱动,但这容易将人引导到歧途:好像所有的Binder服务都需要去ServiceManager去注册才能使用,其实不是这样。例如,平时APP开发通过bindService启动的服务,以及有些自己定义的AIDL远程调用,都不一定都ServiceManager注册这条路,个人理解:Serv...
2019-06-21 16:56:56
217
原创 听说你Binder机制学的不错?来面试下这几个问题(三)
很多文章将Binder框架定义了四个角色:Server,Client,ServiceManager、以及Binder驱动,但这容易将人引导到歧途:好像所有的Binder服务都需要去ServiceManager去注册才能使用,其实不是这样。例如,平时APP开发通过bindService启动的服务,以及有些自己定义的AIDL远程调用,都不一定都ServiceManager注册这条路,个人理解:Serv...
2019-06-21 16:56:56
191
原创 听说你Binder机制学的不错?来面试下这几个问题(二)
本篇是第二篇,主要是涉及线程与进程的唤醒,数据传输的封装与解析, Binder线程的睡眠与唤醒(请求线程睡在哪个等待队列上,唤醒目标端哪个队列上的线程) Binder协议中BC与BR的区别 Binder在传输数据的时候是如何层层封装的–不同层次使用的数据结构(命令的封装) Binder驱动传递数据的释放(释放时机) 一个简单的Binder通信C/S模型 Client端线程睡眠在哪个队列上,唤醒...
2019-06-21 16:43:22
321
原创 听说你Binder机制学的不错?来面试下这几个问题(一)
Binder承担了绝大部分Android进程通信的职责,可以看做是Android的血管系统,负责不同服务模块进程间的通信。在对Binder的理解上,可大可小,日常APP开发并不怎么涉及Binder通信知识,最多就是Service及AIDL的使用会涉及部分Binder知识。Binder往小了说可总结成一句话:一种IPC进程间通信方式,负责进程A的数据,发送到进程B。往大了说,其实涉及的知识还是很多...
2019-06-21 15:03:28
648
2
原创 Android后台Kill(三):LowMemoryKiller原理(4.3-6.0)
本篇是Android后台Kill系列的第三篇,前面两篇已经对后台杀死注意事项,杀死恢复机制做了分析,本篇主要讲解的是Android后台杀死原理。相对于后台杀死恢复,LowMemoryKiller原理相对简单,并且在网上还是能找到不少资料的,不过,由于Android不同版本在框架层的实现有一些不同,网上的分析也多是针对一个Android版本,本文简单做了以下区分对比。LowMemoryKiller...
2019-06-21 14:31:29
612
原创 Android后台Kill(二):ActivityManagerService与App现场恢复机制
本篇是Android后台杀死系列的第二篇,主要讲解ActivityMangerService是如何恢复被后台杀死的进程的(基于4.3 ),在开篇 FragmentActivity及PhoneWindow后台杀死处理机制中,简述了后台杀死所引起的一些常见问题,还有Android系统控件对后台杀死所做的一些兼容,以及onSaveInstance跟onRestoreInstance的作用于执行时机,最...
2019-06-20 15:40:26
1352
原创 Android后台Kill(一):FragmentActivity及PhoneWindow后台杀死处理机制
App在后台久置后,再次从桌面或最近的任务列表唤醒时经常会发生崩溃,这往往是App在后台被系统杀死,再次恢复的时候遇到了问题,而在使用FragmentActivity+Fragment的时候会更加频繁。比如,如果Fragment没有提供默认构造方法,就会在重建的时候因为反射创建Fragment失败而崩溃,再比如,在onCreate里面new 一个FragmentDialog,并且show,被后台...
2019-06-20 14:37:55
668
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅