自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Mango先生的博客

一个不会摄影的吃货不是一个好码农

原创 OpenCV For Android 从零开始搭建开发环境 实现图像处理

最近一个项目有很多需求涉及到了图片处理相关的技术,比如图像边缘检测及区域裁剪,灰度及黑白增强效果,滤镜,人脸美化等,这些功能想纯靠SDK提供的api实现太难了,而且效率也不行,所以就想通过OpenCV来实现,鉴于之前没什么接入经验,所以想通过几篇博客记录其实现过程

2020-03-09 22:14:42 422 0

原创 带你从源码一步步分析Android View面试中的事件分发流程

在Android中,事件分发机制是一块很重要的知识点,掌握这个机制能帮你在平时的开发中解决掉很多的View事件冲突问题,这个问题也是面试中问的比较多的一个问题了,今天就来一探究竟

2019-12-24 21:14:11 696 0

原创 Android网络请求还在用Retrofit吗,来试试使用Apollo Graphql 吧

GraphQL 是 Facebook 于 2012 年在内部开发的数据查询语言,在 2015 年开源,旨在提供 RESTful 架构体系的替代方案。Graphql是一种用于 API 的查询语言,相比于REST API,查询多个数据就需要多个URL不同,它可以做到用一个请求能准确的获取你所需要的所有...

2019-11-10 11:46:10 1181 17

原创 Android wifi列表扫描 密码连接 多个wifi切换登录 广播状态等都在这里

app里有个需求就是在应用内部开发一个wifi设置的功能,避免用户跳到手机wifi设置界面操作,之前没开发过这样的需求,只是简单的判断网络状态,不过心想应该不难,都是挺成熟的东西,其实做了后才知道还是有些坑的,今天来讲讲如何实现这个需求

2019-10-09 08:37:54 1037 0

原创 Android代码安装卸载apk 处理6.0权限/7.0Uri/8.0安装未知来源应用适配问题

在自己的APP里面通过代码手动安装第三方APP或者进行版本更新的时候,会碰到多个版本之间的差异带来的一些适配问题,比如6.0版本开始的运行时权限,7.0开始的文件共享机制,8.0修改后的安装未知来源应用权限等问题,今天通过这篇文章记录下适配过程

2019-09-26 22:16:59 844 0

原创 android sutdio 统计app工程方法数插件 避免超过65536

做Android的肯定都知道android app有65535方法数的限制,至于原因也很简单,Android系统中,一个Dex文件中存储方法id用的是short类型,而short取值范围是-32768 到 32767,两者绝对值之和就是65535,所以导致一个dex中方法数不能超过65535;这个...

2019-09-08 16:01:36 753 0

原创 Android源码解析-掌握AsyncTask工作原理 串行执行原因和内存泄漏的处理

它本质上是一个封装了线程池和Handler的异步框架;它内部使用一个线程池,串行执行每一个线程,线程生命周期不用开发者管理,用来执行异步任务,通过Handler来进行回调更新UI,这一套业务也可以使用Thread来做,但是使用Thread有些麻烦,每次使用都要自己new一个线程,要自己管理其生命周...

2019-08-25 20:10:59 771 0

原创 使用反射+注解封装一个基于Sqlite极简的android数据库框架

目前市面上已经有比较好用的数据库框架,比如GreenDao和OrmLite,而且功能也很齐全,那为什么还要多费功夫重复造轮子呢?原因无他,就为了装个B,哈哈,开个玩笑;每个框架经过了这么多版本的迭代,可以说设计的已经很周到了,考虑到了开发者能考虑到的问题,但是这也带来了一个问题,就是每个开发者使用...

2019-08-18 15:12:48 1267 0

原创 Android源码解析之带你看system server进程启动流程及系统服务启动

System Server进程和Zygote进程可以说是Android世界中的两大最重要的进程,离开其中之一基本上系统就玩完了(这里还有一个Media Server进程,是由init进程fork而来,负责启动和管理整个C++ framework,包含AudioFlinger,Camera Serv...

2019-08-11 20:55:01 997 4

原创 干货分享:实用/高效/有逼格的Android Studio 常用配置/插件推荐

最近一些刚踏上Android开发这条路的童鞋问了一些Android Studio使用相关的问题,比如安装后打开不了,老是在build中;Gradle下载不了;HTTP代理怎么设置;SDK怎么手动下载;如何配置Gradle和Gradle插件;我自己使用Android Studio运行项目好好的,但是...

2019-08-03 23:26:45 1178 2

原创 使用TraceView+实际案列实战性能分析 找出android app UI卡顿原因

ui卡顿应该是程序猿最不想见到的问题了,或者说现象吧,因为这让用户很直接的感受到极差的使用体验,此时用户的内心OS:这什么垃圾APP啊,做的这么卡;心情好点的可能连带着手机一起怼,这什么垃圾手机啊,性能这么差;所以在平常开发的时候一定要注意这方面的问题,多做测试,同时多拿一些机型测试,毕竟Andr...

2019-07-30 20:09:33 937 0

原创 仿写ButterKnife框架核心功能 掌握编译时注解+注解处理器APT生成Java代码的技术

要定义编译时注解只需在定义注解时使用@Retention(RetentionPolicy.CLASS)修饰即可,编译时注解结合注解处理器(APT)在编译期完成操作,对性能影响很小;像@Nullable@NonNull这类的注解就是编译时注解;一些开源框架如BufferKnife, ARout、Da...

2019-07-26 08:57:05 787 0

原创 再也不怕面试官问我类加载器了 超详细解析Android/Java之ClassLoader 双亲委派模型及热部署实践

虚拟机设计团队把类加载过程中的<font color=Crimson>通过一个类的全限定名来获取描述此类的二进制字节流</font>这个动作放到JVM外部去实现,以便让应用程序自己决定如何去获取所需的类,实现这个动作的代码模块就是类加载器;简单点说类加载器就是用来加载Cla...

2019-07-24 20:49:33 1580 3

原创 Android App如何借助OKHttp使用WebSocket实现与服务器实时双向通信【十二】

WebSocket作为一种解决web应用双向通信的协议由HTML5规范引出,是一种建立在TCP协议基础上的全双工通信的协议。它是一个应用层协议,它出现是为了解决HTTP的痛点,希望在服务器与浏览器之间建立一条不受限制的双向通信的通道

2019-07-23 21:42:07 8929 0

原创 Android自定义View如此简单 实现点击动画+进度刷新的提交/下载按钮(填坑面试题)

当我们看到一个复杂的动画效果时,一定要学会拆分实现步骤,因为再复杂的实现,也是由一个一个步骤组成的,我们只需要先将每个小步骤实现出来,再将其组合在一起就行了,这种思路很重要;既然可以应用于实际业务中,正好APP页面也有这方面的需求,所以就想动手绘制出来,于是就有了今天这篇文章,这种动画效果其实还是...

2019-07-21 18:14:48 6925 1

原创 OKHttp3-- 请求服务器拦截器CallServerInterceptor源码分析 【十一】

这篇文章将对OKHttp最后一个拦截器进行解析,总算快要结束了;上一篇文章讲到连接拦截器,即客户端已经与服务端进行了连接,那接下来的操作自然就是发送接收数据了,看看官网的注释 > 这是拦截器链上的最后一个拦截器,向服务器发起网络访问 那接下来就从源码看看它是如何实现发送请求数据,接收响应...

2019-07-14 16:41:07 854 1

原创 通过ConnectInterceptor源码掌握OKHttp3网络连接原理 呕心沥血第十弹【十】

ConnectInterceptor前言连接拦截器Http协议发展OKHttp创新 前言 没想到离上篇OKHttp3源码分析文章已经过去了3个月,中间忙着写其它知识点了,这次准备把OKHttp这个系列结束掉;今天这篇文章来谈谈拦截器链中的第四个拦截器,即连接拦截器,这是OKHttp中非常重要的...

2019-07-05 15:58:13 822 1

原创 Android仿IOS封装通用的弹出框Dialog和底部弹出列表选择框 仿美团顶部条件筛选框 附自定义ViewGroup

鉴于Android提供的默认弹出框很一般,IOS的弹出框样式还不错,同时使用弹出框dialog的需求还是蛮高的,于是就想仿照ios弹出框封装一个通用的dialog,解决操作询问,提示信息,列表选择等需求; 同时在搜索数据的时候,需要选择条件,也是使用弹出框解决,类似于美团的顶部筛选框,今天就来封...

2019-06-29 15:14:58 1484 0

原创 使用AIDL+动态代理+运行时注解+反射 反手撸一套Android跨进程通信框架

由于应用中存在多个进程,比如一个主进程,一个消息推送进程及一个应用守护进程,这使得进程间通信的开发提上日程,而为了提高开发效率,需要提炼出一套跨进程通信的基础框架,以本篇博客记录其编写过程

2019-06-24 07:51:41 2104 6

原创 解密Android7.0 8.0进程保活与拉活的实现方式 如何才能让APP常驻内存 躲避系统的追杀

近期被一些朋友问到关于进程保活这块的知识点,想必是很多开发者研究的重点,虽然我不支持做成这类【流氓软件】,因为大家都这么干的话,Android系统的内存永远不够用,电量消耗的贼快,流畅度肯定就大大的降低了;但是程序猿可能也架不住产品的需求,哪一个产品经理不希望自己的APP在用户的手机上随叫随到;其...

2019-06-20 12:09:47 1931 0

原创 Android自定义View-在Tab上添加红点消息提示数字 动态刷新切换显示椭圆和圆

最近一个老项目里,在tab上有一个数量提示数字,类似于微信和QQ上的未读消息提示那样的效果,不过是用Android自己的基本控件实现的,不是太好动态刷新控制和复用,所以就想通过自定义View来实现这一功能

2019-06-16 22:54:19 1224 0

原创 Android开发如何理解Java静态代理 动态代理及动态生成代理对象原理 看这篇就够了

静态代理是代理模式实现方式之一,比较简单,主要分为三个角色:客户端,代理类,目标类;而代理类需要与目标类实现同一个接口,并在内部维护目标类的引用,进而执行目标类的接口方法,并实现在不改变目标类的情况下前拦截,后拦截等所需的业务功能。在动态代理中,不需要我们再手动创建代理类,只需要编写一个动态处理器...

2019-06-09 11:39:02 2413 6

原创 Android通过仿写EventBus组件通信框架 掌握运行时注解+反射及事件总线通信核心原理

EventBus框架想必做过Android开发的或多或少接触过,使用过;它是一款Android/Java的发布-订阅事件总线框架,简化了Android组件间消息通信的过程,将我们从复杂的组件内通信解脱出来,其Github地址[EventBus](https://github.com/greenro...

2019-05-18 17:06:07 2820 0

原创 Android自动化测试环境部署及adb sdkmanager avdmanager Monitor DDMS工具使用及命令详解

Android自动化测试环境部署,adb全称是Android Debug Bridge,即Android调试桥,电脑和设备之间的连接、调试通道;通过adb相关命令可以在PC端实现对Android设备的控制、获取设备信息;sdkmanager 命令专门用来管理 SDK,可以查看、安装、更新、卸载 A...

2019-05-12 21:33:08 1388 0

原创 Android使用代理+接口实现插件化 仿支付宝微信加载未安装的第三方应用apk

有插件一般都会伴随着宿主的存在,宿主APK实现了一套插件的加载和管理的框架,它作为应用的主工程存在,插件APK是依附于宿主APK存在的 插件也称为Plug-in,或者add-in,俗称外挂,是宿主应用的功能扩展,对宿主来说可有可无,但是一定程度上能提高宿主应用的高可用性;插件化就是在Androi...

2019-05-04 19:05:36 999 0

原创 使用Intellij Idea创建第一个SpringBoot+MyBatis+MySql项目并运行(附安装教程),使用Maven构建项目并管理第三方jar

自从前段时间被拉过来参与Java项目开发后,到现在也算告一段落了(半年过去了,要回到主业Android开发了),一个完整的项目结束了;因为是第一次参与实际Java项目开发,并且只是负责其中的一些模块开发,所以对整个项目的流程没有清晰的把握;比如这个项目是如何创建的,怎么运行的,使用的一些框架等,今...

2019-05-02 21:06:51 1456 0

原创 Android面试题--设计模式之责任链模式的通俗易懂实现及使用场景

将请求者与接收者进行解耦,在其中插入多个对象,每个对象都可以处理该请求,将这些对象连成一条链,并将请求在这条链上传递,直到有一个对象处理该请求为止,这就是责任链模式

2019-04-22 20:19:44 788 0

原创 Android面试题--设计模式之观察者模式的通俗易懂实现 与发布/订阅框架有区别解析

观察者模式观察者模式与发布订阅模式区别实现定义观察者接口定义目标接口定义具体观察者定义具体目标测试总结 观察者模式 在前面三篇文章聊了构建者模式、单例模式、工厂模式,这三种都是属于创建型模式,接下来几篇文章来聊聊行为型模式里的一些设计模式;这篇文章的主题是观察者模式:在对象之间定义了一对多的关系,...

2019-04-09 19:10:12 817 0

原创 Android面试题--设计模式之静态工厂方法模式 工厂方法模式 抽象工厂模式实现

工厂模式专门负责将大量有共同接口的类实例化。工厂模式可以动态决定将哪一个类实例化,而不必事先知道每次要实例化哪一个类

2019-04-08 19:57:34 715 0

原创 Android面试题--设计模式之构建者模式Builder详解及代码demo

构建者模式定义实现角色代码演示Android中构建者模式的样例AlertDialogNotificationOKHttp优点 定义 又称为建造者模式,它是将一个复杂对象的创建和表示进行分离,使得同样的构建过程可以创建不同的表示 怎么理解这句话呢? 比如你要组装一辆汽车,那肯定是需要很多工具...

2019-04-02 19:31:40 768 0

原创 Android面试题--设计模式之单例模式的最全解析及六种实现方式 保证线程安全

单例模式是一种对象创建模式,它用于产生一个对象的具体实例,它可以确保系统中一个类只有一个实例

2019-04-01 22:47:50 904 0

原创 Android的APK安装过程 JVM Dalvik和ART等虚拟机区别以及DEX文件ODEX文件OAT文件区别

APK apk全称是AndroidPackage,也就是Android安装包;APK的本质是一个zip压缩包,如果将后缀名改成.zip,就可以解压,APK 文件与 Zip 文件最大的一个不同是 APK 包含签名信息,用于保证安装包安全不被修改,解压后的目录有: res文件夹:用于存...

2019-03-22 10:35:57 2441 0

原创 Andriod开发--如何实现组件化开发以及解决ButterKnife报错,了解一下

在上一篇文章Android开发之移动端项目架构演化之路 从模块化,组件化再到插件化中我们讲到了移动端项目架构中的组件化开发,这也是目前很火热的一种架构选择,但是也不用盲目跟风,毕竟实现组件化开发是需要额外增加一些开发成本的,如果你的开发团队就一个人或者1-3个人这种小团队,这说明这个项目规模并不大...

2019-03-17 22:55:04 1005 2

原创 OKHttp3-- HTTP缓存机制解析 缓存处理类Cache和缓存策略类CacheStrategy源码分析 【九】

OKHttp提供了缓存机制以将我们的的HTTP和HTTPS请求的响应缓存到文件系统中,但是它默认是不使用缓存的,所以如果我们需要使用缓存(强烈推荐使用),就得在实例化OKHttpClient的时候进行相关的配置

2019-03-16 16:28:03 1084 0

原创 OKHttp3--缓存拦截器CacheInterceptor源码解析【八】

缓存拦截器大致工作过程:首先获取到缓存,如果存在的话,然后根据缓存策略判断在不能使用网络情况下:如果也不能使用缓存就构建一个携带504响应码的响应返回,如果可以使用缓存就返回缓存的响应。如果可以访问网络就通过网络获取响应,如果以前有缓存并且没失效就通过缓存构建响应返回,否则就直接通过网络构建响应。...

2019-03-01 09:04:34 919 0

原创 OKHttp3--桥接拦截器BridgeInterceptor源码解析及相关http请求头字段解析【七】

其实从名字我们大概能猜到一些奥妙,Bridge中文意思即桥梁,连接的意思,那在这里其实就是连接应用程序和服务器的桥梁,我们发出的请求将会经过它的处理才能成为一个服务器能识别的网络请求;所以它的具体作用就是在真正进行网络请求前对我们的请求头做一些设置,比如设置请求内容长度,编码,gzip压缩,coo...

2019-02-20 22:25:55 969 2

原创 OKHttp3--重试及重定向拦截器RetryAndFollowUpInterceptor源码解析【六】

请求失败后重新尝试连接:从Retry这个单词理解,但是在OKHttp中并不是所有的请求失败后(即返回码不是200)都会去重新连接,而是在发生 RouteException 或者 IOException 后再根据一些策略进行一些判断,如果可以恢复,就重新进请求 继续请求:FollowUp本意是跟进...

2019-02-17 21:30:23 1496 2

原创 OKHttp3--拦截器链RealInterceptorChain源码解析【五】

其实听这个名字我们也大概直到拦截器的意思,在OKHttp中,我们发出的HTTP请求并不是直接就连接到服务器然后获取结果,而是由OKHttp中的拦截器截获我们发出的请求,它可以观察,修改并可能使请求中断,然后返回结果,通常情况下,拦截器会对request或者response的头部headers进行添...

2019-02-16 21:38:52 1022 0

原创 OKHttp3--调用对象RealCall源码解析【四】

当我们封装好Request后需要执行这个请求,但是OKHttp并不是直接执行Request,而是将Request又封装了一层为Call对象,方便开发者对请求进行处理;一个Call对象代表一个已准备好执行的请求(Request),Call可以取消,同时一个Call对象代表了一个request/res...

2019-02-15 09:10:50 893 0

原创 文档编写之从Jupyter notebook到Gitbook迁移之路 写作神器了解一下

GitBook既是一个用于编写和托管文档的在线平台,也是一个开源书籍格式和工具链。 成千上万的用户使用GitBook编写文档(库,API,工具等)或知识库(如F.A.Q.)。 人们还使用GitBook发布技术书籍,教材和许多其他内容

2019-02-01 07:57:20 1519 0

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