- 博客(30)
- 资源 (2)
- 收藏
- 关注
原创 《Activity显示界面历险记》—说说View的那些理不清的关系
前言在Activity显示View的过程中,有一些重要的角色总让人理不清,比如PhoneWindow、DecorView、ViewRootImpl。也常常有面试题会问到,他们四者之间的关系?创建的时机?View第一次绘制的时机?等问题。那么今天,就和大家一起从Activity启动开始 看看 到展示出View整个过程中,到底会经过哪些步骤,这之间各角色的关系又如何。动画展示为了方便大家理解,先通过动画的形式给大家展示这几位的关系:源码解析从小爱诞生说起在Activity界面展示之前,它还是个
2021-02-22 11:23:16
193
原创 网络知识十二问(打牢网络知识基础)
前言过年倒计时~今天是网络篇的最后一篇,网络知识也是面试常考内容,所以必须要把基础知识打牢。网络十二问,送给大家。这些问题,你能答上来吗我总结了下网络方面会涉及到的一些问题,大家看看,如果都能答上来,那这篇文章就可以略过了。网络通信的过程,以及中间用了什么协议?TCP连接过程,三次握手和四次挥手,为什么?常用的状态码。讲一下TCP协议和UDP协议的区别和场景socket和WebSocketHttps的链接建立过程讲解一下数字签名,为什么真实可靠证书链安全机制建立过程耗时,那么怎
2021-02-02 16:32:01
293
原创 Java反射全解析(使用、原理、问题、在Android中的应用)
前言今天说Java模块内容:反射。反射介绍正常情况下,我们知晓我们要操作的类和对象是什么,可以直接操作这些对象中的变量和方法,比如一个User类:User user=new User();user.setName("Bob");但是有的场景,我们无法正常去操作:只知道类路径,无法直接实例化的对象。无法直接操作某个对象的变量和方法,比如私有方法,私有变量。需要hook系统逻辑,比如修改某个实例的参数。等等情况。所以我们就需要一种机制能让我们去操作任意的类和对象。这种机制,就是反射
2021-01-19 13:55:49
228
原创 小题大做 | Handler内存泄露全面分析
前言嗨,大家好,问大家一个“简单”的问题:Handler内存泄露的原因是什么?你会怎么答呢?这是错误的回答有的朋友看到这个题表示,就这?太简单了吧。“内部类持有了外部类的引用,也就是Hanlder持有了Activity的引用,从而导致无法被回收呗。”其实这样回答是错误的,或者说没回答到点子上。内存泄漏Java虚拟机中使用可达性分析的算法来决定对象是否可以被回收。即通过GCRoot对象为起始点,向下搜索走过的路径(引用链),如果发现某个对象或者对象组为不可达状态,则将其进行回收。而内存泄漏
2020-12-24 11:06:42
468
原创 能否让APP永不崩溃—小光与我的对决
前言关于拦截异常,想必大家都知道可以通过Thread.setDefaultUncaughtExceptionHandler来拦截App中发生的异常,然后再进行处理。于是,我有了一个不成熟的想法。。。让我的APP永不崩溃既然我们可以拦截崩溃,那我们直接把APP中所有的异常拦截了,不杀死程序。这样一个不会崩溃的APP用户体验不是杠杠的?有人听了摇摇头表示不赞同,这不小光跑来问我了:“老铁,出现崩溃是要你解决它不是掩盖它!!”我拿把扇子扇了几下,有点冷但是故作镇定的说:“这位老哥,你可以把
2020-12-10 09:30:36
231
原创 探究 | 如何捕获一个 Activity页面上所有的点击行为
前言最近逛wanAndroid论坛,发现一个有趣的问题:如何捕获一个Activity页面上所有的点击行为。一起研究下吧,不想看源码的小伙伴可以直接看文末总结~准备工作先得罗列出页面上的一些点击行为,常用的有:普通View的点击动态add的View的点击Dialog上的按钮点击于是就有了如下代码:class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle
2020-12-03 17:02:19
834
原创 线程与更新UI,消除偏见,细谈原理
前言相信不少读者都阅读过相类似的文章了,但是我还是想完整的把这之间的关系梳理清楚,细节聊好,希望你也能从中学到一些。进入正题,大家应该都听过这样一句话——“UI更新要在主线程,子线程更新UI会崩溃”。久而久之就感觉这是个真理,甚至被认为是“官方结论”。但是如果问你,官方什么时候在哪里说过这句话,你会不会有点懵。而且就算是官方说的,也就不一定对的是吧,众所周知,Google官方文档一直都有点说的不清不楚,需要我们进行大量实践得出实际的结论。就好比之前的Android11更新文档,我也是看了好久,通过一
2020-11-18 09:35:00
142
原创 谈谈Android项目框架的前世今生
嗨,大家好,今天出了大太阳,真是美好的开始。这篇文章和大家说说Android届流行的三大框架,了解下架构的前世今生,以及我对于这些框架的一些认识和看法。三大框架区别MVC架构介绍Model:数据模型,比如我们从数据库或者网络获取数据View:视图,也就是我们的xml布局文件Controller:控制器,也就是我们的Activity模型联系View --> Controller,也就是反应View的一些用户事件(点击触摸事件)到Activity上。Controller --&
2020-10-29 10:40:46
203
2
原创 Android面试题收录及解答10月刊
前言嗨,大家好,好久不见。一个月没写过文章了,这里跟大家侃侃这中间发生了什么。一个月前呢,想准备面试,就网上随便找找面试题什么的,发现要么就是卖课的,要么就是不给详细回答的或者回答不够深的(也许是我没找到????)。反正稍微有点苦恼,因为我毕竟是个懒人,就想看看面试题,然后自己思考下,顺便看看一些参考回答,看看自己回答的全不全面等等。于是,我就想干脆我自己做这个事吧,就算没人看,也当我自己每天复习下了。于是,我就建了一个小小公众号(小到确实没人看,哈哈哈),每天去找一些大厂的面试真题,然后解答下,然后
2020-10-26 09:36:51
1620
2
原创 女儿拿着小天才电话手表问我App启动流程
前言首先,new一个女儿,var mDdaughter = new 女儿("6岁",“漂亮可爱”,“健康乖巧”,“最喜欢玩小天才电话手表和她的爸爸”)好了,女儿有了,有一天,女儿问我:“爸爸爸爸,你说我玩的这个小天才电话手表怎么这么厉害,随便点一下这个小图片,这个应用就冒出来了,就可以听儿歌了。好神奇啊。”我心里一惊:小天才电话手表的系统就是Android,所以这不就是。。面试官常考的应用启动流程嘛!女儿也要来面试我了吗!????好了,既然女儿问了,那就答吧。但是,对付这个小小的0经验
2020-09-01 17:31:26
2204
原创 拖不得了,Android11真的要来了,最全适配实践指南奉上
前言最近看到一条新闻,Android 11(version 30,Andorid R)最终Beta版 如期发布,看到这个新闻我知道我不能再拖了,再不好好准备好迎接Android11的到来,到时候迎接我的就是客户的指责,甚至老板的一封休书了 ????。今天就和大家一起看看Android11到底改了些什么,以及最重要的,我们需要怎么适配?targetversion不改到30,是不是就不用适配了呢?以下我分为两部分讲述,分别是以Adnroid11 为目标版本的应用(targetSdkVersion>
2020-08-13 15:46:02
4128
8
原创 后羿:我射箭了快上—用MotionLayout实现王者荣耀团战
前言昨晚跟往常一样,饭后开了一局王者荣耀,前中期基本焦灼,到了后期一波决定胜负的时候,我果断射箭,射中对面,配合队友直接秒杀,打赢团战一波推完基地。那叫一个精彩,队友都发出了666666的称赞,我酷酷的点了一下抱拳:多谢!嘿嘿。赛后,手机上正在展示我的MVP动画,我不禁思考,这么精彩的团战我怎么能不记录下来?刚好最近了解到MotionLayout库,就用它实现吧????。动画效果功能详解MotionLayout 是一种布局类型,可帮助您管理应用中的运动和微件动画。MotionLayout 是
2020-08-03 17:31:15
586
原创 是时候更新手里的武器了—Jetpack最全简析
前言Android Jetpack想必大家都耳熟能详了,Android KTX,LiveData,Room等等一系列库都是出自 Jetpack。那么Jetpack到底是什么?又包含哪些你还没用过的东西?Google推出这个的原因又是什么?今天我们就一起来完善一下我们脑中的Jetpack构图。(篇幅较长,建议点赞关注Mark哦???? )介绍2018年谷歌I/O,Jetpack横空出世,官方介绍如下:Jetpack 是一套库、工具和指南,可帮助开发者更轻松地编写优质应用。这些组件可帮助您遵循最佳做法
2020-07-29 16:05:11
4295
原创 雨露均沾的OkHttp—WebSocket长连接(源码篇)
前言雨露均沾的OkHttp—WebSocket长连接(使用篇)雨露均沾的OkHttp—WebSocket长连接(源码篇)上期我们熟悉了OkHttp中实现WebSocket长连接的接入,并且可以通过OkHttp官方的MockWebSocket服务来模拟服务端,实现整个流程。今天我们就来说下具体OkHttp中是怎么实现这些功能的呢?相信看过这篇文章你也能深刻了解WebSocket这个协议。使用回顾简单贴下WebSocket使用方法,方便下面解析: //初始化 mClie
2020-07-13 17:29:13
690
原创 雨露均沾的OkHttp—WebSocket长连接(使用篇)
前言最近老板又来新需求了,要做一个物联网相关的app,其中有个需求是客户端需要收发服务器不定期发出的消息。内心OS:???? 这咋整呢?通过接口轮询?定时访问接口,有数据就更新????? 不行不行,这样浪费资源了,还耗电,会导致很多请求都是无效的网络操作。???? 那就长连接呗?WebSocket协议好像不错,通过握手建立长连接后,可以随时收发服务器的消息。那就它了!???? 怎么集成呢?正好前段时间复习OkHttp源码的时候发现了它是支持Websocket协议的,那就用它试试吧!(戏好多,演不
2020-07-07 18:29:12
1779
2
原创 更快!更高效!启动优化框架Alpha完全解析
背景启动优化,其实就是优化从点击icon到主页面展示这个过程的速度,让主界面尽量快的展现在用户面前。所以我们要做的就是找到那些耗时操作,并将其优化。怎么找到?一般分成两个场景:1、线下(debug)场景在应用的开发阶段,我们一般通过AOP进行函数的耗时统计,通过aspectj库可以很方便的将代码插入到函数内部,从而统计到每个方法的耗时时间。或者直接通过Android Studio 自带的Profiler CPU工具,查看每个方法的时间,CPU信息。2、线上场景当应用已经发布到线上,统计就变得
2020-06-28 12:10:45
1612
原创 Handler:你真的了解我吗?
提到handler,大家都想到些什么呢,切换线程?延时操作?那么你是否了解IdleHandler,同步屏障,死循环的设计原理?以及由Handler机制衍生的IntentService,BlockCanary?这次我们说下Android中最常见的Handler,通过解析面试点或者知识点,带你领略Handler内部的神奇之处。先说下基本的用法和工作流程用法很简单,定义一个handler,重写handleMessage方法处理消息,用send方法通知handler但是主线程和其他线程用法却有点不一样.
2020-05-13 17:10:57
993
2
原创 我保证,这是我最后一次看Android事件分发机制了
这次说下Android中的事件分发机制从开始点击屏幕开始,就会产生从Activity开始到decorview一直到最里层的view一连串事件传递。每一层view或者viewgroup都会首先调用它的dispatchTouchEvent方法,然后判断是否就在当前一层消费掉事件view的事件分发首先上一段伪代码,是在书上看到的,也是我觉得总结的最好的public boolean dispa...
2020-05-07 18:13:36
466
原创 一学就会之Android必备网络基础知识
计算机网络基础知识讲解TCP/IPTCP/IP是指能够在多个不同网络间实现信息传输的协议簇TCP/IP协议不仅仅指的是TCP 和IP两个协议,而是指一个由FTP、SMTP、TCP、UDP、IP等协议构成的协议簇, 只是因为在TCP/IP协议中TCP协议和IP协议最具代表性,所以被称为TCP/IP协议为什么会有这些协议的东西呢?其实就是约定的一个规矩,一个在网络通信时定义的规矩,好让大家...
2020-04-29 18:26:15
505
原创 彻底明白Android设计模式—(动态)代理模式
代理模式其实就是提供了对目标对象的另外的访问方式,通过代理对象访问目标对象为啥要这么麻烦呢!!!其实是为了不去修改原有的代码,通过代理也可以访问这个对象而且可以进行扩展这种模式有什么应用场景呢?先说下生活中对应的场景,明星接通告一般商家要找明星做活动,是要先找到他的经纪人,然后经纪人去负责一些琐碎的或者运营方面的事情,而明星只需要做具体的活动相关事情就可以了。这里经纪人的作用就是作为了一...
2020-04-22 09:54:41
377
原创 彻底明白Android设计模式—工厂方法模式
封装类中变化的部分,提取其中个性化善变的部分为独立类,通过依赖注入以达到解耦、复用和方便后期维护拓展的目的ok,还是举个????,既然是工厂模式,就打比方有一个工厂生产产品,首先要一个抽象产品类,描述产品的公共方法,以及两个具体的产品(手机产品和电视产品):/** * 抽象产品类,所有产品的抽象父类,描述公共的方法部分 */ public abstract clas...
2020-04-21 11:07:41
247
原创 彻底明白Android设计模式—适配器模式
该模式是将两个不相干的接口进行适配,从而在一起工作代码示例比如这里要定义一个适配器,用于hdmi接口转vga接口,生活中比较常用是吧,直接上代码/** * 定义HDMI接口 */public interface HDMI { void hdmiwork();}/** * 定义VGA接口 */public interface VGA { void vgaw...
2020-04-21 11:07:05
202
原创 彻底明白Android设计模式—建造者模式
将一个复杂对象的 构建和表示 分离的模型什么意思呢,就是比如我要创建一个对象,我只需要把最重要的一些信息告诉他,他就可以帮我完成所有的事情,简单构建,不需要了解具体的怎么表示过程接下来,我们直接实现一个建造者模式示例代码比如,我要制造一个手机,建造者模式可以让我不用了解到具体手机怎么生产的,只需要提供手机的一些参数,比如颜色,系统等,就可以制造出一个完整的手机了。/** * ...
2020-04-20 10:23:41
301
1
原创 彻底明白Android设计模式—观察者模式(发布-订阅模式)
顾名思义,这个模式就是用来观察的,形成一种观察的关系后,当这个对象的状态改变,其他所有的观察者都会有所反馈开始举????,比如最近很火的抢口罩!!当所有人都订阅观察一款口罩的存货信息,口罩有存货后会给每个用户发消息,然后用户就可以来抢购了,这就是观察者模式,上代码: /** * 定义观察者的接口 */ public interface Observer { ...
2020-04-20 10:22:24
1121
原创 彻底明白Android设计模式—单例模式
这次讲讲最简单也最常用的单例模式(顾名思义 保证实例唯一的一种设计模式)直接五种单例模式献上,让你了解单例模式的前世今生饿汉模式像一个饿汉一样,不管需不需要,有没有,都一定要去创建实例。因为太饿了,不管三七二十一,我就要吃!!! /*一、饿汉模式*/ private static Singleton singleton = new Singleton(); publi...
2020-04-17 11:10:32
900
原创 Android多线程的五种方式,我该怎么选择
Android多线程在应用中被广泛使用,多线程操作也有多种方法。这次就和大家一起熟悉下Android中多线程的操作方法,以及到底在实际应用场景下该怎么选择多线程操作方法Android中,主要提供了以下几种多线程操作方法:Thread,RunnableHandlerThreadAsyncTaskExecutorIntentService1、Thread,Runnable首...
2020-04-17 11:08:05
553
原创 Android内存分析最强攻略(内存泄漏,内存检测)
来,今天来说说Android中的内存分析相关问题。内存介绍现在Android手机运行内存是越来越大了,基本上都是6g,8g。那么内存都这么大了,我们还需要考虑内存泄漏,OOM等问题吗。肯定需要啊,不然我就不用写这篇文章了????。因为虽然Andorid内存越来越大,但是提供给应用的java堆内存却不多,一般好点的手机可能也就512M左右。所以我们还是需要多多考虑应用的内存问题,尽量优化,避免内存...
2019-10-09 14:51:32
839
原创 Android应用在国外之各种广告集成(Vungle,AppLovin,Google,Facebook)
来今天简单介绍下国外的一些主流广告平台,主要介绍其中的视频奖励广告Vungle领先的In-app视频广告平台,被Business Insider评为15家热门的未上市广告技术公司。主要应用在游戏类app上,其中娱乐场类游戏占比较高。集成方式:添加依赖dependencies { // Vungle SDK implementation 'com.vungle:publ...
2019-09-29 13:51:55
3327
1
原创 Android崩溃分析之Java 崩溃
来,今天来说说Android崩溃中的Java崩溃。Java 崩溃 简单点说就是在 Java 代码中,出现了未捕获异常,导致程序异常退出崩溃分析遇到崩溃其实很正常,而且随着用户量的增加,覆盖到的设备越来越多,可能越来越多的问题和崩溃就会摆在我们面前,我们需要的是认真仔细地对待这些崩溃,并想办法解决。这里总结了一个崩溃三步走:排个序对于崩溃的问题,我们需要先排个序,优先解决那些重要...
2019-09-29 13:51:06
397
原创 Android Studio下Git的两种使用方法(超详细)
提了好久的笔,终于开始写博客了。今天要说的是版本控制工具,作为个人开发者,我一般使用的就是gitoso(码云)管理代码,因为可以建立私人(不公开)的项目。今天我就来讲一讲AndroidStudio下git的两种使用方法。
2017-02-28 17:28:43
3809
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人