自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(44)
  • 收藏
  • 关注

原创 是时候让 Android Tools 属性拯救你了

原文链接: 是时候让 Android Tools 属性拯救你了日常开发过程中,我们都会遇到这样一种场景:我们写出的 UI 效果在对接数据之前需要提前进行预览,进而调整 UI 细节和排版问题。我们一般的做法是什么样的?如果存在像 TextView 或者 ImageView 这种基础控件,你是不是还在通过诸如 android:text=“xxx” 和 android:src="@drawable/...

2019-09-02 15:21:36 273

原创 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 757

原创 一篇文章搞懂Android组件化

网上组件化的文章很多,我本人学习组建化的过程也借鉴了网上先辈们的文章。但大多数文章都从底层的细枝末节开始讲述,由下而上给人一种这门技术“博大精深”望而生畏的感觉。而我写这篇文章的初衷就是由上而下,希望别人在阅读的过程中能够觉得“组件化原来也就是这几个东西”的感觉。首先我们来看一下组件化项目和传统项目的区别在传统的项目里我们通常情况下会有一个commonLib的Libary模块和一个app的a...

2019-08-15 10:26:47 179

原创 痴人说梦?来看看程序员究竟是如何做到年薪 50 万的?

我比较了解Android这块,我就直接从Android的角度出发吧。至于说转管理的事,忽略了,程序员转管理肯定是可取的,但是本文只从技术的角度来说一个程序员如何做到年薪50万。(Ps:略长,相信可以给看完的朋友一点帮助)一个Android程序员达到年薪50万的同时,他也是一名架构师了。(这里防杠一下:月薪是月薪,年薪是年薪,月薪1w一定比年薪12w要高,原因有:年底多薪、年终奖以及各种福利待遇...

2019-08-14 14:40:57 157

原创 Android热修复技术原理详解(最新最全版本)

本文框架什么是热修复?热修复框架分类技术原理及特点Tinker框架解析各框架对比图总结通过阅读本文,你会对热修复技术有更深的认知,本文会列出各类框架的优缺点以及技术原理,文章末尾简单描述一下Tinker的框架结构。一、什么是热修复?正常开发流程热修复开发流程热修复优势修复什么?二、热修复框架分类现状:百花齐放百家争鸣简单分类更合理的分类三、技术原...

2019-08-13 17:51:37 257

原创 2019年“金九银十”剑指BATJ,来自高级Android工程师的面试分享

“金九银十”每年到了9、10月份,一方面正是各大企业为第二年拓展业务而大量吸纳人才的关键时期,招聘需求集中、空缺岗位多,另一方面用人单位习惯在初秋进行大规模招聘,正好可以避过盛夏的酷暑,因此可以说是招聘旺季。 这个时间又刚好遇上应届高校毕业生要找工作,同时,已就业者想跳槽找寻更理想的工作,造成了每年该季度人才流动的高峰,因此可以说是求职旺季。供需两旺,因故称之为人才市场的“金九银十”。而随...

2019-08-12 14:42:20 151

原创 剑指金九银十:Android程序员面试季千万不要在基础知识点挂了

前言金九银十即将到来,但很多人面试之前,可能没有在互联网公司工作过或者说工作过但年头较短,不知道互联网公司技术面试都会问哪些问题? 再加上可能自己准备也不充分,去面试没几个回合就被面试官几个问题打蒙了,最后以惨败收场。下述是我收录整理的Android面试题汇总,由于篇幅原因,在这只把基础知识点部分的题目列举出来,后续还会更新其余面试题内容,大家可以关注一下我,及时知晓我的更新,同时这份面试集...

2019-08-10 13:38:16 127

原创 备战金九银十:Android 40道最常见的原理性面试题及答案分享

前言金九银十即将到来,但很多人面试之前,可能没有在互联网公司工作过或者说工作过但年头较短,不知道互联网公司技术面试都会问哪些问题? 再加上可能自己准备也不充分,去面试没几个回合就被面试官几个问题打蒙了,最后以惨败收场。下述是我收录整理的Android面试题汇总,由于篇幅原因,在这只把常见原理性面试题的题目列举出来,后续还会更新其余面试题内容,大家可以关注一下我,及时知晓我的更新,同时这份面试...

2019-08-07 15:20:08 119

原创 如何成为一名Android架构师,乃至高级架构师?这有完整进阶路线

很多Android的小伙伴在做了多年的开发之后,始终搞不清楚达到Android架构师需要何种技能,我们对比着Android高级工程师来说明。我们先来看一下Android高级工程师的招聘要求职位描述:Responsibility(岗位职责)Android平台功能模块的设计与开发移动端开发框架的研究与设计移动端技术规范的制定与推广移动端技术培训Requirements(岗位要求)...

2019-07-28 21:55:09 291

原创 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 1454

转载 Android:手把手带你入门跨平台UI开发框架Flutter

前言Flutter 作为Google出品的一个新兴的跨平台移动客户端UI开发框架,正在被越来越多的开发者和组织使用,包括阿里的咸鱼、腾讯的微信等。今天,我将献上一份 《全面 & 详细的Flutter学习指南》,希望你们会喜欢。目录1. 简介定义:一款Google出品&开源的移动客户端UI开发框架(SDK)作用:用一套代码同时在Android、iOS上...

2019-07-25 17:07:20 329

原创 Android性能调优:几种常用界面切换效果

Activity的切换动画指的是从一个activity跳转到另外一个activity时的动画。它包括两个部分:一部分是第一个activity退出时的动画;另外一部分时第二个activity进入时的动画;在Android的2.0版本之后,有了一个函数来帮我们实现这个动画。这个函数就是overridePendingTransition@Overridepublic void onCreat...

2019-07-24 19:39:00 2529 1

原创 前Google技术主管:程序员五大雷区,请你一定要避开

软件工程师的技能发展都会经历一个自然的过程——经验从无到有,最后变成老手。而一旦到了经验丰富的阶段,他们对代码就不那么感兴趣了。恰恰相反,他们会把更多的精力放在文件设计和代码重构上。奇怪的是,不管任职于哪家公司,大多数经验丰富的工程师都会表现出同样的特点。他们缺乏对代码的关注,和其他工程师相比,他们写代码的速度较慢。这是因为和仅仅编写代码相比,他们会将更多的时间花在设计上面。从一个新手到经验...

2019-07-22 21:52:21 190

原创 图文详解Android Handler通信机制的工作原理

前言在Android开发的多线程应用场景中,Handler机制十分常用本文就图文详解一下 Handler机制 的工作原理目录1. 定义一套 Android 消息传递机制2. 作用在多线程的应用场景中,将工作线程中需更新UI的操作信息 传递到 UI主线程,从而实现 工作线程对UI的更新处理,最终实现异步消息的处理3. 为什么要用 Handler消息传递机制...

2019-07-19 21:25:22 6395 1

原创 史上最全的Android常规知识点面试题集锦

前言很多人面试之前,可能没有在互联网公司工作过或者说工作过但年头较短,不知道互联网公司技术面试都会问哪些问题? 再加上可能自己准备也不充分,去面试没几个回合就被面试官几个问题打蒙了,最后以惨败收场。下述是我整理的Android常规知识点面试题汇总,另外还有整理出架构师技术脑图和Android面试专题文档免费分享给大家!由于篇幅原因,在这只把部分的题目列举出来,后续还会更新其余面试题内容,大家可...

2019-07-17 22:03:17 426

原创 性能优化:Android App启动速度优化

一、App启动分类1.冷启动 Cold start在启动应用前,系统还没有App的任何进程。比如设备开机后应用的第一次启动,系统杀掉应用进程 (如:系统内存吃紧引发的 kill 和 用户主动产生的 kill) 后 的再次启动等。那么自然这种方式下,应用的启动时间最长。2.热启动 Warm start当应用中的 Activities 被销毁,但在内存中常驻时,应用的启动方式就会变为暖启动。相...

2019-07-16 20:36:13 601

原创 Android:Profiler

Android studio的分析工具分为:CPU、Memory、NetWork、Energy.CPU Profiler:从Android profiler面板选择指定设备和应用程序进入到CPU Profiler界面,我们能够直观的看到CPU的使用情况和线程的情况.分别介绍下相关标号的CPU Profiler的相关功能:**1.**事件时间轴:表示当前分析的应用程序随着用户交互在不同活动...

2019-07-13 22:14:28 639

原创 ViewPager的坑

前言做程序开发,基础很重要。同样是拧螺丝人家拧出来的可以经久不坏,你拧出来的遇到点风浪就开始颤抖,可见基本功的重要性。此系列,专门收录一些看似基础,但是没那么简单的小细节,同时提供权威解决方案。喜欢的同志们点个赞就是对我最大的鼓励!先行谢过!网上可能有一些其他文章,提供了解决方案,但是要么就是没有提供可运行demo,要么就是demo不够纯粹,让人探索起来受到其他代码因素的影响,无法专注于当...

2019-07-12 17:54:38 472

原创 Android性能优化-如何避免过度渲染?

1)Why Rendering Performance Matters现在有不少App为了达到很华丽的视觉效果,会需要在界面上层叠很多的视图组件,但是这会很容易引起性能问题。如何平衡Design与Performance就很需要智慧了。2)Defining ‘Jank’大多数手机的屏幕刷新频率是60hz,如果在1000/60=16.67ms内没有办法把这一帧的任务执行完毕,就会发生丢帧的现象。...

2019-07-09 22:20:38 501

原创 Android程序员详解:Handler机制

Handler在我们日常开发中会经常用到,它主要用于处理异步消息,当发出一个消息之后,首先进入到一个消息队列,发送消息的函数即可返回,而另外一个部分在消息队列中逐一取出,然后对消息进行处理。虽然经常用到它,但是用的方式不正确也会产生一些问题,下面先来了解一些Handler相关的问题并解决Handler造成内存泄漏Andorid中一般都是在子线程中执行耗时的业务逻辑,然后通过Handler发从...

2019-07-08 21:21:28 324

原创 Android OOM 分析

前言在内存使用过程中使用不当或者超过heap size limit的时候就会出现OOM,那一般OOM 是怎么产生的,会导致什么样的结果呢?OOM简介OOM全称为Out of memory,解释为内存溢出。为了整个Android系统的内存控制需要,Android系统为每一个应用程序都设置了一个硬性的Dalvik Heap Size最大限制阈值,这个阈值在不同的设备上会因为RAM大小不同而各...

2019-07-08 15:27:25 857

原创 Android:序列化总结

前言公园里,一位仙风鹤骨的老者在打太极,一招一式都仙气十足,一个年轻人走过去:“大爷,太极这玩意儿花拳绣腿,你练它干啥?”老者淡淡一笑:“年轻人,你还没有领悟到太极的真谛,这样,你用最大力气打我试试。”于是年轻人用力打了老头一拳,被讹了八万六。从段子就能看出来,今天这篇博客又是一碗炒冷饭。序列化使用很简单,但是其中的一些细节并不是所有人都清楚。在日常的应用开发中,我们可能需要让某些对象离开内存...

2019-07-04 15:45:59 166

原创 十年Android程序员:探索Android CameraX

如果你曾经用过 Android 的 Camera APIs,你可能已经感受到了,它们一直没有成为最容易实现的东西。最开始是 Camera API,然后又推荐使用 Camera2 API — 这个升级是为了让开发者在使用 Android 的相机 API 时有更好的体验。然而,使用相机的 API (即使是最简单的使用)时还是会有很多脏代码,而且,在 Android 应用中要实现 Camera 功能时...

2019-07-04 14:25:31 805

原创 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 154

原创 Android:反射机制(一)

什么是反射机制?JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制(注意关键词:运行状态)换句话说,Java程序可以加载一个运行时才得知名称的class,获悉其完整构造(但不包括methods定义),并生成其对象实体、或对其fields设值、...

2019-07-01 21:56:21 134

原创 Android窗口管理分析(1):View如何绘制到屏幕上的主观理解

窗口管理可以说是Android系统中最复杂的一部分,主要是它涉及的模块比较多,虽然笼统的说是窗口管理,其实,除了WindowManagerService还包括SurfaceFlinger服务、Linux的共享内存及tmpfs文件系统、Binder通信、InputManagerService、动画、VSYNC同步技术等,一篇文章不可能分析完全,但是可以首先对于窗口的显示与管理有一个大概的轮廓,再分块...

2019-06-25 15:42:08 378

原创 全屏、沉浸式、fitSystemWindow使用及原理分析:全方位控制“沉浸式”的实现

目录状体栏颜色设置原理与导航栏颜色设置原理fitSystemWindow全屏及WindowInsets消费原fitSystemWindow与padding不同层级的消费Theme中window属性配置影响SystemUi及状体栏添加原理前言状态栏与导航栏属于SystemUi的管理范畴,虽然界面的UI会受到SystemUi的影响,但是,APP并没有直接绘制SystemUI的权限与必...

2019-06-25 15:34:28 608

原创 Android Handler与Looper原理浅析

本文分析下Android的消息处理机制,主要是针对Handler、Looper、MessageQueue组成的异步消息处理模型,先主观想一下这个模型需要的材料:消息队列:通过Handler发送的消息并是即刻执行的,因此需要一个队列来维护工作线程:需要一个线程不断摘取消息,并执行回调,这种线程就是Looper线程互斥机制,会有不同的线程向同一个消息队列插入消息,这个时候就需要同步机制进行保证...

2019-06-25 15:26:37 169

原创 从Toast显示原理初窥Android窗口管理

Android窗口管理系统是非常大的一块,涉及AMS、InputManagerService、输入法管理等,这么复杂的一个系统,如果直接扎进入分析看源码可能会比较混乱,所以,本文以Toast显示原理作为切入点,希望能简单点初窥一下WMS。首先,简单看下Toast用法:Context context = getApplicationContext();CharSequence text = "H...

2019-06-25 15:22:39 239

原创 三句代码创建全屏Dialog或者DialogFragment:带你从源码角度实现

Dialog是APP开发中常用的控件,同Activity类似,拥有独立的Window窗口,但是Dialog跟Activity还是有一定区别的,最明显的就是:默认情况下Dialog不是全屏的,所以布局实现不如Activity舒服,比如顶部对齐,底部对齐、边距、宽度、高度等。如果将Dialog定义成全屏的就会省去很多问题,可以完全按照常用的布局方式来处理。网上实现方式有不少,一般情况下也都能奏效,不过...

2019-06-24 13:44:26 243

原创 Android进程保活 - 自“裁”或者耍流氓(二)

通过“流氓”手段提高oom_adj,降低被杀风险,化身流氓进程进程优先级的计算Android是有自己的一条准则的,某些特殊场景的需要额外处理进程的oom_adj Android也是给了参考方案的。但是,那对于流氓来说,并没有任何约束效力。 "流氓"仍然能够参照oom_adj(优先级)的计算规则,利用其漏洞,提高进程的oom_adj,以降低被杀的风险。如果单单降低被杀风险还好,就怕那种即不想死,又...

2019-06-24 11:43:39 474

原创 Android进程保活 - 自“裁”或者耍流氓(一)

本篇文章是后台杀死系列的最后一篇,主要探讨一下进程的保活,Android本身设计的时候是非常善良的,它希望进程在不可见或者其他一些场景下APP要懂得主动释放,可是Android低估了”贪婪“,尤其是很多国产APP,只希望索取来提高自己的性能,不管其他APP或者系统的死活,导致了很严重的资源浪费,这也是Android被iOS诟病的最大原因。本文的保活手段也分两种:遵纪守法的进程保活与流氓手段换来的...

2019-06-24 11:41:31 241

原创 Android后台Kill(四):Binder讣告原理

Binder是一个类似于C/S架构的通信框架,有时候客户端可能想知道服务端的状态,比如服务端如果挂了,客户端希望能及时的被通知到,而不是等到再起请求服务端的时候才知道,这种场景其实在互为C/S的时候最常用,比如AMS与APP,当APP端进程异常退出的时候,AMS希望能及时知道,不仅仅是清理APP端在AMS中的一些信息,比如ActivityRecord,ServiceRecord等,有时候可能还需要...

2019-06-24 11:29:48 538

原创 听说你Binder机制学的不错?来面试下这几个问题(三)

很多文章将Binder框架定义了四个角色:Server,Client,ServiceManager、以及Binder驱动,但这容易将人引导到歧途:好像所有的Binder服务都需要去ServiceManager去注册才能使用,其实不是这样。例如,平时APP开发通过bindService启动的服务,以及有些自己定义的AIDL远程调用,都不一定都ServiceManager注册这条路,个人理解:Serv...

2019-06-21 16:56:56 144

原创 听说你Binder机制学的不错?来面试下这几个问题(三)

很多文章将Binder框架定义了四个角色:Server,Client,ServiceManager、以及Binder驱动,但这容易将人引导到歧途:好像所有的Binder服务都需要去ServiceManager去注册才能使用,其实不是这样。例如,平时APP开发通过bindService启动的服务,以及有些自己定义的AIDL远程调用,都不一定都ServiceManager注册这条路,个人理解:Serv...

2019-06-21 16:56:56 130

原创 听说你Binder机制学的不错?来面试下这几个问题(二)

本篇是第二篇,主要是涉及线程与进程的唤醒,数据传输的封装与解析,Binder线程的睡眠与唤醒(请求线程睡在哪个等待队列上,唤醒目标端哪个队列上的线程)Binder协议中BC与BR的区别Binder在传输数据的时候是如何层层封装的–不同层次使用的数据结构(命令的封装)Binder驱动传递数据的释放(释放时机)一个简单的Binder通信C/S模型Client端线程睡眠在哪个队列上,唤醒...

2019-06-21 16:43:22 175

原创 听说你Binder机制学的不错?来面试下这几个问题(一)

Binder承担了绝大部分Android进程通信的职责,可以看做是Android的血管系统,负责不同服务模块进程间的通信。在对Binder的理解上,可大可小,日常APP开发并不怎么涉及Binder通信知识,最多就是Service及AIDL的使用会涉及部分Binder知识。Binder往小了说可总结成一句话:一种IPC进程间通信方式,负责进程A的数据,发送到进程B。往大了说,其实涉及的知识还是很多...

2019-06-21 15:03:28 440 2

原创 Android后台Kill(三):LowMemoryKiller原理(4.3-6.0)

本篇是Android后台Kill系列的第三篇,前面两篇已经对后台杀死注意事项,杀死恢复机制做了分析,本篇主要讲解的是Android后台杀死原理。相对于后台杀死恢复,LowMemoryKiller原理相对简单,并且在网上还是能找到不少资料的,不过,由于Android不同版本在框架层的实现有一些不同,网上的分析也多是针对一个Android版本,本文简单做了以下区分对比。LowMemoryKiller...

2019-06-21 14:31:29 430

原创 Android后台Kill(二):ActivityManagerService与App现场恢复机制

本篇是Android后台杀死系列的第二篇,主要讲解ActivityMangerService是如何恢复被后台杀死的进程的(基于4.3 ),在开篇 FragmentActivity及PhoneWindow后台杀死处理机制中,简述了后台杀死所引起的一些常见问题,还有Android系统控件对后台杀死所做的一些兼容,以及onSaveInstance跟onRestoreInstance的作用于执行时机,最...

2019-06-20 15:40:26 1066

原创 Android后台Kill(一):FragmentActivity及PhoneWindow后台杀死处理机制

App在后台久置后,再次从桌面或最近的任务列表唤醒时经常会发生崩溃,这往往是App在后台被系统杀死,再次恢复的时候遇到了问题,而在使用FragmentActivity+Fragment的时候会更加频繁。比如,如果Fragment没有提供默认构造方法,就会在重建的时候因为反射创建Fragment失败而崩溃,再比如,在onCreate里面new 一个FragmentDialog,并且show,被后台...

2019-06-20 14:37:55 474

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除