- 博客(111)
- 资源 (18)
- 收藏
- 关注
原创 Android开发如何使用Docker为Jenkins持续集成助力
那Docker是什么呢?可以粗浅理解成它就像个里面装了很多东西的盒子,如果其他人要用,那就直接把这个盒子拿走捣鼓捣鼓就可以用了,而不需要自己再重新吭哧吭哧把需要的东西一个个装到盒子里
2022-12-18 17:57:18
888
原创 OpenCV For Android 从零开始搭建开发环境 实现图像处理
最近一个项目有很多需求涉及到了图片处理相关的技术,比如图像边缘检测及区域裁剪,灰度及黑白增强效果,滤镜,人脸美化等,这些功能想纯靠SDK提供的api实现太难了,而且效率也不行,所以就想通过OpenCV来实现,鉴于之前没什么接入经验,所以想通过几篇博客记录其实现过程
2020-03-09 22:14:42
1665
原创 带你从源码一步步分析Android View面试中的事件分发流程
在Android中,事件分发机制是一块很重要的知识点,掌握这个机制能帮你在平时的开发中解决掉很多的View事件冲突问题,这个问题也是面试中问的比较多的一个问题了,今天就来一探究竟
2019-12-24 21:14:11
1410
1
原创 Android网络请求还在用Retrofit吗,来试试使用Apollo Graphql 吧
GraphQL 是 Facebook 于 2012 年在内部开发的数据查询语言,在 2015 年开源,旨在提供 RESTful 架构体系的替代方案。Graphql是一种用于 API 的查询语言,相比于REST API,查询多个数据就需要多个URL不同,它可以做到用一个请求能准确的获取你所需要的所有数据,不多不少。
2019-11-10 11:46:10
3139
27
原创 Android wifi列表扫描 密码连接 多个wifi切换登录 广播状态等都在这里
app里有个需求就是在应用内部开发一个wifi设置的功能,避免用户跳到手机wifi设置界面操作,之前没开发过这样的需求,只是简单的判断网络状态,不过心想应该不难,都是挺成熟的东西,其实做了后才知道还是有些坑的,今天来讲讲如何实现这个需求
2019-10-09 08:37:54
3580
23
原创 Android代码安装卸载apk 处理6.0权限/7.0Uri/8.0安装未知来源应用适配问题
在自己的APP里面通过代码手动安装第三方APP或者进行版本更新的时候,会碰到多个版本之间的差异带来的一些适配问题,比如6.0版本开始的运行时权限,7.0开始的文件共享机制,8.0修改后的安装未知来源应用权限等问题,今天通过这篇文章记录下适配过程
2019-09-26 22:16:59
2167
原创 android sutdio 统计app工程方法数插件 避免超过65536
做Android的肯定都知道android app有65535方法数的限制,至于原因也很简单,Android系统中,一个Dex文件中存储方法id用的是short类型,而short取值范围是-32768 到 32767,两者绝对值之和就是65535,所以导致一个dex中方法数不能超过65535;这个方法数不是说只是你自己写的方法,还包含android library,第三方library等
2019-09-08 16:01:36
1210
原创 Android源码解析-掌握AsyncTask工作原理 串行执行原因和内存泄漏的处理
它本质上是一个封装了线程池和Handler的异步框架;它内部使用一个线程池,串行执行每一个线程,线程生命周期不用开发者管理,用来执行异步任务,通过Handler来进行回调更新UI,这一套业务也可以使用Thread来做,但是使用Thread有些麻烦,每次使用都要自己new一个线程,要自己管理其生命周期,而且android还不允许在非主线程的线程更新UI,这样的话thread运行得到的结果如果需要更新UI可能还需要发一个handler通知主线程更新界面,代码写起来比较凌乱不如asynctask一目了然好维护。
2019-08-25 20:10:59
1197
原创 使用反射+注解封装一个基于Sqlite极简的android数据库框架
目前市面上已经有比较好用的数据库框架,比如GreenDao和OrmLite,而且功能也很齐全,那为什么还要多费功夫重复造轮子呢?原因无他,就为了装个B,哈哈,开个玩笑;每个框架经过了这么多版本的迭代,可以说设计的已经很周到了,考虑到了开发者能考虑到的问题,但是这也带来了一个问题,就是每个开发者使用这些框架的需求是不同的,有的需要这些功能,有的需要那些功能,这样你就没有必要把整个框架都导入到你的项目中来
2019-08-18 15:12:48
2224
原创 Android源码解析之带你看system server进程启动流程及系统服务启动
System Server进程和Zygote进程可以说是Android世界中的两大最重要的进程,离开其中之一基本上系统就玩完了(这里还有一个Media Server进程,是由init进程fork而来,负责启动和管理整个C++ framework,包含AudioFlinger,Camera Service等服务);System Server负责启动和管理整个framework,基本上在Framework中的大多数服务都是在system server进程中以一个线程的方式存在的
2019-08-11 20:55:01
2727
4
原创 干货分享:实用/高效/有逼格的Android Studio 常用配置/插件推荐
最近一些刚踏上Android开发这条路的童鞋问了一些Android Studio使用相关的问题,比如安装后打开不了,老是在build中;Gradle下载不了;HTTP代理怎么设置;SDK怎么手动下载;如何配置Gradle和Gradle插件;我自己使用Android Studio运行项目好好的,但是一旦导入别人的项目,Android Studio就一直在Build;方法类注释模板怎么设置,代码风格主题怎么换等等问题,这里就基于自己平时开发习惯整理下解决办法,以及分享一些好用的配置及提高android stud
2019-08-03 23:26:45
3008
4
原创 使用TraceView+实际案列实战性能分析 找出android app UI卡顿原因
ui卡顿应该是程序猿最不想见到的问题了,或者说现象吧,因为这让用户很直接的感受到极差的使用体验,此时用户的内心OS:这什么垃圾APP啊,做的这么卡;心情好点的可能连带着手机一起怼,这什么垃圾手机啊,性能这么差;所以在平常开发的时候一定要注意这方面的问题,多做测试,同时多拿一些机型测试,毕竟Android碎片化太严重了,随便一个小厂家都能做个手机出来卖。
2019-07-30 20:09:33
1615
1
原创 仿写ButterKnife框架核心功能 掌握编译时注解+注解处理器APT生成Java代码的技术
要定义编译时注解只需在定义注解时使用@Retention(RetentionPolicy.CLASS)修饰即可,编译时注解结合注解处理器(APT)在编译期完成操作,对性能影响很小;像@Nullable@NonNull这类的注解就是编译时注解;一些开源框架如BufferKnife, ARout、Dagger、Retrofit等都有使用编译时注解
2019-07-26 08:57:05
1208
原创 再也不怕面试官问我类加载器了 超详细解析Android/Java之ClassLoader 双亲委派模型及热部署实践
虚拟机设计团队把类加载过程中的<font color=Crimson>通过一个类的全限定名来获取描述此类的二进制字节流</font>这个动作放到JVM外部去实现,以便让应用程序自己决定如何去获取所需的类,实现这个动作的代码模块就是类加载器;简单点说类加载器就是用来加载Class文件的,它负责将Class的字节码数据转换成JVM运行时数据区(内存)的Class对象
2019-07-24 20:49:33
2584
3
原创 Android App如何借助OKHttp使用WebSocket实现与服务器实时双向通信【十二】
WebSocket作为一种解决web应用双向通信的协议由HTML5规范引出,是一种建立在TCP协议基础上的全双工通信的协议。它是一个应用层协议,它出现是为了解决HTTP的痛点,希望在服务器与浏览器之间建立一条不受限制的双向通信的通道
2019-07-23 21:42:07
14227
1
原创 Android自定义View如此简单 实现点击动画+进度刷新的提交/下载按钮(填坑面试题)
当我们看到一个复杂的动画效果时,一定要学会拆分实现步骤,因为再复杂的实现,也是由一个一个步骤组成的,我们只需要先将每个小步骤实现出来,再将其组合在一起就行了,这种思路很重要;既然可以应用于实际业务中,正好APP页面也有这方面的需求,所以就想动手绘制出来,于是就有了今天这篇文章,这种动画效果其实还是比较简单的,但是今天重点不在于此,主要是想借这篇文章重点叙述下自定义View的流程,也就是如何从零开始自定义一个View,以及涉及到的一些概念和冷门知识点,当然也是面试中经常会被问到的
2019-07-21 18:14:48
8309
1
原创 OKHttp3-- 请求服务器拦截器CallServerInterceptor源码分析 【十一】
这篇文章将对OKHttp最后一个拦截器进行解析,总算快要结束了;上一篇文章讲到连接拦截器,即客户端已经与服务端进行了连接,那接下来的操作自然就是发送接收数据了,看看官网的注释> 这是拦截器链上的最后一个拦截器,向服务器发起网络访问那接下来就从源码看看它是如何实现发送请求数据,接收响应数据的
2019-07-14 16:41:07
1333
1
原创 通过ConnectInterceptor源码掌握OKHttp3网络连接原理 呕心沥血第十弹【十】
ConnectInterceptor前言连接拦截器Http协议发展OKHttp创新前言没想到离上篇OKHttp3源码分析文章已经过去了3个月,中间忙着写其它知识点了,这次准备把OKHttp这个系列结束掉;今天这篇文章来谈谈拦截器链中的第四个拦截器,即连接拦截器,这是OKHttp中非常重要的一个拦截器,值得重视连接拦截器这个拦截器类的源码很简单,只有数十行,如下 @Override ...
2019-07-05 15:58:13
2105
2
原创 Android仿IOS封装通用的弹出框Dialog和底部弹出列表选择框 仿美团顶部条件筛选框 附自定义ViewGroup
鉴于Android提供的默认弹出框很一般,IOS的弹出框样式还不错,同时使用弹出框dialog的需求还是蛮高的,于是就想仿照ios弹出框封装一个通用的dialog,解决操作询问,提示信息,列表选择等需求;同时在搜索数据的时候,需要选择条件,也是使用弹出框解决,类似于美团的顶部筛选框,今天就来封装下
2019-06-29 15:14:58
3800
原创 使用AIDL+动态代理+运行时注解+反射 反手撸一套Android跨进程通信框架
由于应用中存在多个进程,比如一个主进程,一个消息推送进程及一个应用守护进程,这使得进程间通信的开发提上日程,而为了提高开发效率,需要提炼出一套跨进程通信的基础框架,以本篇博客记录其编写过程
2019-06-24 07:51:41
5709
6
原创 解密Android7.0 8.0进程保活与拉活的实现方式 如何才能让APP常驻内存 躲避系统的追杀
近期被一些朋友问到关于进程保活这块的知识点,想必是很多开发者研究的重点,虽然我不支持做成这类【流氓软件】,因为大家都这么干的话,Android系统的内存永远不够用,电量消耗的贼快,流畅度肯定就大大的降低了;但是程序猿可能也架不住产品的需求,哪一个产品经理不希望自己的APP在用户的手机上随叫随到;其实说实话一个APP很难做到真正的不死,除非你的应用被手机厂商拉到了白名单中;在Android L之前还可以通过Native层做到应用不死,不过这个漏洞被Google给修复了;那么作为一个不在白名单中的应用怎么才能
2019-06-20 12:09:47
5723
1
原创 Android自定义View-在Tab上添加红点消息提示数字 动态刷新切换显示椭圆和圆
最近一个老项目里,在tab上有一个数量提示数字,类似于微信和QQ上的未读消息提示那样的效果,不过是用Android自己的基本控件实现的,不是太好动态刷新控制和复用,所以就想通过自定义View来实现这一功能
2019-06-16 22:54:19
2685
2
原创 Android开发如何理解Java静态代理 动态代理及动态生成代理对象原理 看这篇就够了
静态代理是代理模式实现方式之一,比较简单,主要分为三个角色:客户端,代理类,目标类;而代理类需要与目标类实现同一个接口,并在内部维护目标类的引用,进而执行目标类的接口方法,并实现在不改变目标类的情况下前拦截,后拦截等所需的业务功能。在动态代理中,不需要我们再手动创建代理类,只需要编写一个动态处理器及指定要代理的目标对象实现的接口类型,真正的代理对象由JDK在运行时为我们创建
2019-06-09 11:39:02
3957
6
原创 Android通过仿写EventBus组件通信框架 掌握运行时注解+反射及事件总线通信核心原理
EventBus框架想必做过Android开发的或多或少接触过,使用过;它是一款Android/Java的发布-订阅事件总线框架,简化了Android组件间消息通信的过程,将我们从复杂的组件内通信解脱出来,其Github地址[EventBus](https://github.com/greenrobot/EventBus);既然它这么好用,那不对它进行一番解析,或者说仿写一款同样的框架,实在说不过去;然后在加深对它的理解的同时,站在作者的角度去解决问题,也能提高我们平时的开发质量;本篇文章重点不是对它进行源
2019-05-18 17:06:07
3672
原创 Android自动化测试环境部署及adb sdkmanager avdmanager Monitor DDMS工具使用及命令详解
Android自动化测试环境部署,adb全称是Android Debug Bridge,即Android调试桥,电脑和设备之间的连接、调试通道;通过adb相关命令可以在PC端实现对Android设备的控制、获取设备信息;sdkmanager 命令专门用来管理 SDK,可以查看、安装、更新、卸载 Android SDK 的软件包;DDMS全称是Dalvik Debug Monitor Service,是 Android 开发环境中的Dalvik虚拟机调试监控服务
2019-05-12 21:33:08
4676
原创 Android使用代理+接口实现插件化 仿支付宝微信加载未安装的第三方应用apk
有插件一般都会伴随着宿主的存在,宿主APK实现了一套插件的加载和管理的框架,它作为应用的主工程存在,插件APK是依附于宿主APK存在的插件也称为Plug-in,或者add-in,俗称外挂,是宿主应用的功能扩展,对宿主来说可有可无,但是一定程度上能提高宿主应用的高可用性;插件化就是在Android开发领域,在不改变宿主应用的情况下,通过插件动态扩展应用功能,在运行时将功能植入到应用系统中
2019-05-04 19:05:36
2053
2
原创 使用Intellij Idea创建第一个SpringBoot+MyBatis+MySql项目并运行(附安装教程),使用Maven构建项目并管理第三方jar
自从前段时间被拉过来参与Java项目开发后,到现在也算告一段落了(半年过去了,要回到主业Android开发了),一个完整的项目结束了;因为是第一次参与实际Java项目开发,并且只是负责其中的一些模块开发,所以对整个项目的流程没有清晰的把握;比如这个项目是如何创建的,怎么运行的,使用的一些框架等,今天就通过这篇文章梳理下
2019-05-02 21:06:51
5461
2
原创 Android面试题--设计模式之责任链模式的通俗易懂实现及使用场景
将请求者与接收者进行解耦,在其中插入多个对象,每个对象都可以处理该请求,将这些对象连成一条链,并将请求在这条链上传递,直到有一个对象处理该请求为止,这就是责任链模式
2019-04-22 20:19:44
1290
原创 Android面试题--设计模式之观察者模式的通俗易懂实现 与发布/订阅框架有区别解析
观察者模式观察者模式与发布订阅模式区别实现定义观察者接口定义目标接口定义具体观察者定义具体目标测试总结观察者模式在前面三篇文章聊了构建者模式、单例模式、工厂模式,这三种都是属于创建型模式,接下来几篇文章来聊聊行为型模式里的一些设计模式;这篇文章的主题是观察者模式:在对象之间定义了一对多的关系,当一个对象发生改变时,依赖它的对象将收到通知并自动更新怎么形象的理解这句话呢?天气预报这类的应用大...
2019-04-09 19:10:12
1486
原创 Android面试题--设计模式之静态工厂方法模式 工厂方法模式 抽象工厂模式实现
工厂模式专门负责将大量有共同接口的类实例化。工厂模式可以动态决定将哪一个类实例化,而不必事先知道每次要实例化哪一个类
2019-04-08 19:57:34
1035
原创 Android面试题--设计模式之构建者模式Builder详解及代码demo
构建者模式定义实现角色代码演示Android中构建者模式的样例AlertDialogNotificationOKHttp优点定义又称为建造者模式,它是将一个复杂对象的创建和表示进行分离,使得同样的构建过程可以创建不同的表示怎么理解这句话呢?比如你要组装一辆汽车,那肯定是需要很多工具和零部件的,然后你不管三七二十一,跑到库房去,面对着一屋子的零件,你是不是懵逼了,我该怎么从这一堆东西里找到组...
2019-04-02 19:31:40
1221
原创 Android面试题--设计模式之单例模式的最全解析及六种实现方式 保证线程安全
单例模式是一种对象创建模式,它用于产生一个对象的具体实例,它可以确保系统中一个类只有一个实例
2019-04-01 22:47:50
1344
原创 Android的APK安装过程 JVM Dalvik和ART等虚拟机区别以及DEX文件ODEX文件OAT文件区别
APKapk全称是AndroidPackage,也就是Android安装包;APK的本质是一个zip压缩包,如果将后缀名改成.zip,就可以解压,APK 文件与 Zip 文件最大的一个不同是 APK 包含签名信息,用于保证安装包安全不被修改,解压后的目录有:res文件夹:用于存放Android资源文件的目录,里面有drawable图片资源,布局文件等,这里面的文件都是被编译过的(图片除外...
2019-03-22 10:35:57
4611
1
原创 Andriod开发--如何实现组件化开发以及解决ButterKnife报错,了解一下
在上一篇文章Android开发之移动端项目架构演化之路 从模块化,组件化再到插件化中我们讲到了移动端项目架构中的组件化开发,这也是目前很火热的一种架构选择,但是也不用盲目跟风,毕竟实现组件化开发是需要额外增加一些开发成本的,如果你的开发团队就一个人或者1-3个人这种小团队,这说明这个项目规模并不大,使用单项目架构或者模块化开发也就足够了,采用组件化就没有什么性价比了但是如果项目...
2019-03-17 22:55:04
2362
2
原创 OKHttp3-- HTTP缓存机制解析 缓存处理类Cache和缓存策略类CacheStrategy源码分析 【九】
OKHttp提供了缓存机制以将我们的的HTTP和HTTPS请求的响应缓存到文件系统中,但是它默认是不使用缓存的,所以如果我们需要使用缓存(强烈推荐使用),就得在实例化OKHttpClient的时候进行相关的配置
2019-03-16 16:28:03
3210
原创 OKHttp3--缓存拦截器CacheInterceptor源码解析【八】
缓存拦截器大致工作过程:首先获取到缓存,如果存在的话,然后根据缓存策略判断在不能使用网络情况下:如果也不能使用缓存就构建一个携带504响应码的响应返回,如果可以使用缓存就返回缓存的响应。如果可以访问网络就通过网络获取响应,如果以前有缓存并且没失效就通过缓存构建响应返回,否则就直接通过网络构建响应。如果使用了缓存机制还需将响应对象保存到缓存中
2019-03-01 09:04:34
1797
6
原创 OKHttp3--桥接拦截器BridgeInterceptor源码解析及相关http请求头字段解析【七】
其实从名字我们大概能猜到一些奥妙,Bridge中文意思即桥梁,连接的意思,那在这里其实就是连接应用程序和服务器的桥梁,我们发出的请求将会经过它的处理才能成为一个服务器能识别的网络请求;所以它的具体作用就是在真正进行网络请求前对我们的请求头做一些设置,比如设置请求内容长度,编码,gzip压缩,cookie等,获取响应后为响应添加一些响应头信息
2019-02-20 22:25:55
1666
2
原创 OKHttp3--重试及重定向拦截器RetryAndFollowUpInterceptor源码解析【六】
请求失败后重新尝试连接:从Retry这个单词理解,但是在OKHttp中并不是所有的请求失败后(即返回码不是200)都会去重新连接,而是在发生 RouteException 或者 IOException 后再根据一些策略进行一些判断,如果可以恢复,就重新进请求继续请求:FollowUp本意是跟进的意思,主要有以下几种类型可以继续发起请求 * 407/401:未进行身份认证,需要对请求头进行处理后再发起新的请求 * 408:客户端请求超时,如果 Request 的请求体没有被 Unrepeatab
2019-02-17 21:30:23
4106
2
原创 OKHttp3--拦截器链RealInterceptorChain源码解析【五】
其实听这个名字我们也大概直到拦截器的意思,在OKHttp中,我们发出的HTTP请求并不是直接就连接到服务器然后获取结果,而是由OKHttp中的拦截器截获我们发出的请求,它可以观察,修改并可能使请求中断,然后返回结果,通常情况下,拦截器会对request或者response的头部headers进行添加,删除,转换操作总而言之,拦截器是OKHttp提供的一种强大机制,它可以实现网络监听,请求以及响应重写,失败重连等功能
2019-02-16 21:38:52
3222
原创 OKHttp3--调用对象RealCall源码解析【四】
当我们封装好Request后需要执行这个请求,但是OKHttp并不是直接执行Request,而是将Request又封装了一层为Call对象,方便开发者对请求进行处理;一个Call对象代表一个已准备好执行的请求(Request),Call可以取消,同时一个Call对象代表了一个request/response 对(Stream),因此一个Call无法被执行两次
2019-02-15 09:10:50
2253
DB.Browser.for.SQLite-3.11.2-win64.zip
2020-02-15
Postman-win64-7.17.0-Setup.zip
2020-02-14
graphql-playground-electron-setup-1.8.10.zip
2020-02-04
genymotion.zip
2019-09-27
剪贴板工具Ditto
2019-05-06
typora-setup-x64
2019-01-30
Android系统源代码
2018-08-22
node-v8.9.1-x64.zip
2018-08-15
AtomSetup-x64_1.21.2.zip
2018-08-15
pycharm-community-2018.1.4.zip
2018-06-04
Anaconda3-5.2.0-Windows-x86_64.exe
2018-06-04
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人