Android
文章平均质量分 86
json_it学习笔记
纸上得来终觉浅,绝知此事要躬行
展开
-
嵌套滑动温习小结
NestedScrollingParent:以下简称“NSP”,NestedScrollingChild:以下简称“NSC”,这两个接口是嵌套滑动的精髓,是我们实现嵌套滑动遵守的“规则”。NOTE:本博文非详细原理篇,原理分析网上资料很多!!与传统事件分发相比,好在哪?方向维度 - 传统事件分发机制 方向:父控件 -> 子控件,且是一锤子买卖,即事件总是先...原创 2019-12-14 22:24:04 · 238 阅读 · 0 评论 -
自定义View、ViewGroup(温习&实战&笔记)
自定义View、ViewGroup的最基本的支持要点 自定义View - onMeasure、onDraw wrap_content; padding;自定义ViewGroup -onMeasure、onLayoutwrap_content; padding; margin;为啥View只需支持padding,而ViewGroup需要支持padding和margin...原创 2019-11-24 00:12:35 · 395 阅读 · 0 评论 -
重温Android中的线程、线程池源码
本篇博文涉及到的一些Android中常用的线程相关知识,源码也比较简单,作为重温笔记。Android中的线程、线程池,,如下图所示:AsyncTask 上述方法的执行顺序是:1 -> 2-> 3-> 4对于AsyncTask有如下几点可以从源码中得到验证AsyncTask的对象必须在主线程中创建(非必须,后面会...原创 2019-10-22 08:39:41 · 252 阅读 · 0 评论 -
Window和WindowManager学习笔记
WindowWindow表示一个窗口的概念,同时Window也是一个抽象的概念,Window是一个抽象类,其具体实现是PhoneWindow。/** * Abstract base class for a top-level window look and behavior policy. An * instance of this class should be used as ...原创 2019-09-07 18:16:17 · 291 阅读 · 0 评论 -
“自动抢红包”、“智能安装”的本质 - 辅助服务(Accessibility Service)
一、辅助服务的本质辅助服务是谷歌推出旨在帮助身体残疾或不方便操作手机的人,更好的和设备进行交互。国内环境下,对于辅助服务的使用似乎偏离的谷歌的初衷,比如“自动抢红包”等,感觉被玩坏了。从技术的角度看,辅助服务的本质就是一个Service,只是这个Service比较特殊,为什么这么说呢?因为这个Service只能由系统绑定,即生命周期由系统管理。还有一点就是辅助服务的启用,必须用户手动开...原创 2019-04-30 19:09:48 · 576 阅读 · 0 评论 -
Android系统启动学习随记
init进程init进程是Android系统中用户空间的第一个进程,作为第一个进程,它被赋予了很多极其重要的工作职责,比如创建zygote(孵化器)和属性服务等。init进程是由多个源文件共同组成的,这些文件位于源码目录system/core/init。Zygote进程在Android系统中,DVM(Dalvik虚拟机)、应用程序进程以及运行系统的关键服务的SystemServer进程...原创 2019-09-10 07:47:10 · 196 阅读 · 0 评论 -
Android 事件传递流程 - 基于WMS、IMS、ViewRootImpl等学习笔记
概述在Android中,Touch事件的分发分服务端和应用端。在服务端由WindowManagerService(借助InputManagerService)负责采集和分发的,在应用端则是由ViewRootImpl(内部有一个mView变量指向View树的根,负责控制View树的UI绘制和事件消息的分发)负责分发的。WMS在启动之后,经过逐层的调用,在Native层启动两个线程:Input...原创 2019-09-14 13:52:48 · 1533 阅读 · 0 评论 -
Android 通知相关适配及总结
一、高版本适配之渠道 targetVersion为Android 8.0及以上的版本,需要创建通知的渠道(channel),否则就不会显示通知。(注:渠道的创建不会影响低版本,低版本会忽略渠道)private fun createNotificationChannel() { // Create the NotificationChannel, but only on...原创 2018-09-30 17:44:47 · 848 阅读 · 0 评论 -
EventBus原理与源码解析
一、概述 EventBus是针对Android优化的发布-订阅事件总线,简化了Android组件间的通信。EventBus以其简单易懂、优雅、开销小等优点而备受欢迎。 关于EventBus的基本使用不再详述,网上的资料很多,可以自行学习,或者直接去GitHub上查看基本使用方法。 在讲解源码之前,先说一下EventBus需要关注的点 - EventBus支持的四种线...原创 2018-04-15 15:39:58 · 6969 阅读 · 1 评论 -
架构思考之MVC、MVP、谷歌架构组件
MVC -> MVP系列(主流)-> 2017 Google I/O Android 架构组件1.0 稳定版https://github.com/googlesamples/android-architecture1、MVC(图片源于网络) 我们知道,在Android中,View(XML)的作用是很弱的,因此Activity/Fragment既充当了Vi原创 2018-01-12 17:04:39 · 813 阅读 · 0 评论 -
View绘制及RecycleView知识点备份
原创 2017-09-05 15:06:26 · 264 阅读 · 0 评论 -
Android应用内存泄露分析、改善经验总结
前言 通过这几天对好几个应用的内存泄露检测和改善,效果明显:完全退出应用时,手动触发GC,从原来占有内存100多M降到低于20M;手动触发GC后,通过adb shell dumpsys meminfo packagename -d查看Activity和View的数量也趋近于0了(没有做到归零是因为SDK中存在内存泄露,需要中间层去处理);发现了一个SDK中的内存泄转载 2017-08-08 14:42:05 · 396 阅读 · 0 评论 -
Android如何绘制视图,解释了为何onMeasure有时要调用多次
当Activity获取焦点的时候,它就需要绘制布局。Android框架会处理绘制过程,但这个Activity必须提供它布局树的根节点。 绘制过程是从布局的根节点开始的。这个过程需要测量和绘制布局树。绘制过程是通过遍历树和渲染每个与绘制区域相交的视图来处理的。接下来,ViewGroup职责就是请求它的每个子视图都会绘制(使用draw()方法),同时View的职责就是绘制自身。由于这个树都转载 2017-06-22 13:45:34 · 506 阅读 · 0 评论 -
ListView 缓存机制源码浅析
ListView的缓存机制是通过RecycleBin实现对View的缓存实现的。缓存机制大大的提高了View的复用率,这也是为什么ListView可以加载大量的Item也不会OOM的原因。当然了,为了进一步提高性能我们都会自定义一个ViewHolder来避免不必要的findViewById操作,这也是RecycleView与ListView的区别之一。RecycleBin是ListView/Gri原创 2017-09-14 21:04:40 · 634 阅读 · 0 评论 -
okio源码解析
1、为什么要学习okio源码?a)okio是安卓大神JakeWharton之作,大神之作必须是值得学习的。b)okio简单易用,高效。okio是对Java io、nio的简洁封装,原生的Java io采用装饰者模式,使用的时候非常繁琐,而相同的操作okio只需短短几行代码就可以搞定,当然除了简单易用之外,okio还是一个非常高效的io库,显著的节省CPU和Memory资源。c)okio原创 2017-09-27 12:14:45 · 814 阅读 · 0 评论 -
Glide V4源码解析
本文的所有分析源码基于4.3.1版本。相比于Glide V3版本,V4版本有较大的改进,代码上也进行了重构。V4版本采用了注解处理器为我们生成一个流式的Api,可以让开发者无缝的过渡到V4版本的使用,因为注解为我们生成的流式Api在使用上与V3版本基本完全相同。具体使用方法及介绍:Glide v4中文文档。1、概述Glide是一个高度解耦、可扩展的高性能图片加载库。V4原创 2017-11-25 23:49:14 · 1529 阅读 · 1 评论 -
Retrofit原理探究[源码解析]
1、概述 Retrofit对于Android开发人员是一个较熟悉的网络请求框架,其简洁的使用方式,一度备受开发者的喜爱。我在去年年尾的时候的时候,也将Retrofit应用到新项目的开发,以取代原有的网络请求框架,不得不说Retrofit使用起来太方便了,短短的几行代码就可以搞定繁琐的网络请求。 在刚开始使用Retrofit的时候,我一度很好奇Re原创 2017-12-19 14:57:19 · 467 阅读 · 0 评论 -
自定义运行时注解、编译时注解[ButterKnife原理探析]
本篇博文针对具备注解基础的读者,主要讲解如何进行自定义注解。关于注解的具体基础知识点,网上这方面的学习资料非常多,可自行学习。注解目前在主流的框架,比如Android中的Glide、Retrofit;Java Web方向的Spring等都有大量的使用。在给开发者带来巨大方便的同时,作为开发者有必要了解学习注解及其自定义,甚至可以自定义自己的注解库呦。以下分析均在Android Studio原创 2017-12-02 23:38:42 · 1644 阅读 · 1 评论 -
Android自定义相机拍摄黑屏
速记,备查。1、需求场景拍摄20秒 + 视频质量不能太低 + 视频大小不能超过5M;2、方案调用系统相机和自定义相机;1、调用系统相机(不满足需求)视频质量只能设置高(1)和低(0),高的话,拍出来的视频太大;低的话,拍出来的视频大小满足,但是质量惨不忍睹;而且,即使设置了拍摄时常,很多手机的计数仍在继续;2、自定义相机自定义相机,需要设置的参数很多,尤其是进行视频原创 2017-11-22 17:06:06 · 2123 阅读 · 1 评论 -
okhttp源码解析
OkHttp是一个非常优秀的网络请求框架,已被谷歌加入到Android的源码中。目前比较流行的Retrofit也是默认使用OkHttp的。所以OkHttp的源码是一个不容错过的学习资源,学习源码之前,务必熟练使用这个框架,否则就是跟自己过不去。use -> running source code -> reading & learning the source code.1、初识原创 2017-11-03 15:01:17 · 25320 阅读 · 13 评论 -
OkHttp wiki官方文档翻译(二)
拦截器拦截器是一个很强大的机制,可以监视、重写、重试请求。下面的例子是打印请求和响应的日志。class LoggingInterceptor implements Interceptor { @Override public Response intercept(Interceptor.Chain chain) throws IOException { Request requ翻译 2017-10-13 13:37:44 · 379 阅读 · 0 评论 -
OkHttp wiki官方文档翻译(一)
请求每一个Http请求包含一个URL,请求方法(比如GET Or POST),以及一系列的header。请求也有可能包含一个请求体:某种特殊类型的数据流。响应响应的内容包括一个响应码(比如200代表成功 或者 404代表未找到),响应头以及响应体。重写请求当你使用OkHttp发起一个Http请求,Okhttp会重写你的请求在真正发送该请求之前。OkHttp会向你的请求添加如翻译 2017-09-29 23:48:12 · 678 阅读 · 0 评论 -
手写一个RecycleView的BaseQuickAdapter
1、概述如上图,整个BaseQuickAdapter的结构还是很简单的,BaseViewHolder负责缓存item View以及常用的操作的封装,而convert抽象方法是我们在BaseQuickAdapter抽象类中暴露给用户的方法,用户只需实现该方法,并在该方法中绑定数据即可,无需了解BaseViewHolder实现的细节。2、使用不使用BaseQuickAdapter的原创 2017-09-22 15:57:34 · 655 阅读 · 0 评论