- 博客(57)
- 收藏
- 关注

原创 Java ThreadPoolExecutor线程池学习笔记(使用、原理、常见问题总结)-这一篇就够了
简介线程池的由来:线程资源十分有限,开启线程需要系统开销,所以我们可以换成一定数量的线程,然后取管理和复用这些线程,统一分配和控制线程的最大并发数,提供拒绝机制。优点降低创建、销毁线程的开销(重用线程池的线程)有效控制线程池的最大并发数,避免大量的线程之间因互相抢占系统资源而导致阻塞现象;提高线程响应速度提高对线程的管理,提供定时/循环间隔执行等功能工作原理实际上通过 T...
2019-03-07 14:45:07
1327

原创 2019最全Android面试题总结(持续更新中。。。)
视图相关系统View组件ListViewQ:ListView为什么可以加载1000个条目不崩?Q:什么是RecycleBin,它是怎么和ListView回收和复用的?Q:你知道notifyDataSetChanged方法干了啥吗?调用之后为啥ListView就刷新了?Q:你知道ListView的跟手滑动和fling是怎么实现的吗?ScrollViewQ:ScrollV...
2019-02-27 23:23:03
2079
3

原创 Android面试---ListView原理及fling分析
为了节约你的时间,上面的图是整个文章的最终图,包括了以下部分问题的答案。目录1.为什么需要使用Adapter?RecycleBin是什么?2.ListView的绘制过程是怎样的?3.ListView的回收机制是怎么样的?为什么可以显示100个View而不崩呢?4.ListView里面的观察者模式是什么?5.惯性滑动(fling)是怎么实现的?0.基本使用获...
2019-02-15 17:19:57
1792

原创 在Android中你用过动态代理吗?Java动态代理原理解析(附github源码)
前言如果我们是做SDK开发,最常用的架构就是MVC。在MVC中,我们经常会提供给外部C,用于让外部调用我们SDK暴露的功能。如果我们的V,要添加一个按钮,或者V的视图滑动事件,要提供给C去暴露出去,V和C基本要同时写2个方法,比如addButton(Button btn)。这个时候我们发现问题了,每次我们要去提供V、M的功能暴露出去,就要同时去C里面实现一个方法。那有没有一个方法能够让V、...
2019-01-28 14:43:32
1093

原创 基于AIDL的 Activity、Service跨进程观察者模式实现与源码解读(附github源码)
前言上篇文章最简单的Activity、Service使用、通信指南二(AIDL进程间通信)(附github源码),介绍了怎么使用AIDL文件,实现在跨进程环境下,Activity获取Service中每秒递增的num并展示的过程,并简单讲解了下AIDL文件的构成(Stub,Proxy),并留下了3个问题。1.这个Stub.Proxy何许人也?为啥能够和远端Binder通信?2.为啥同进程...
2019-01-27 17:56:25
1066
2

原创 5分钟告诉你,Activity的视图绘制流程(onMeasure、onLayout、onDraw的调用和参数解释)
本篇主要面对有一定Android基础的同学,但是Android初学者的话,也不要急。在网上可以看到很多文章,会告诉你onMeaure是什么?里面的参数是什么意思?会教你怎么获取MeaSpec的size和mode(Unspecified、Exactly、AtMost)。也会告诉你怎么重写 onLayout,怎么使用layout方法去布局子元素,怎么实现流式布局,自动换行。还有会告诉你重写onDraw...
2019-01-26 13:58:18
2539

原创 我的Android学习之旅(持续更新中...)
为什么写这个博客?楼主写这个博客是为了把平时学习中、开发中遇到的一些重要的问题记录下来,然后可以分享给其他人,大家一起学习。楼主也是从初学者开始学习Android,博客中文章从初学者到进阶原理的讲解都有涵盖,同时为了摆脱枯燥的代码讲解,楼主把代码统一提交到了github:https://github.com/samwangzhibo/LoveStudy(不会使用github导入代码的同学...
2019-01-25 16:36:08
1248

原创 从源码角度分析Activity的生命周期时序怎么触发的(onCreate onStart onResume onPause onStop onDestroy)(附测试代码)
【转载请注明出处:5分钟告诉你,Activity的生命周期怎么触发的(onCreate onStart onResume onPause onStop onDestroy)(附测试代码) 优快云 王智博】前言试想一下,如果从Activity A 跳转到Activity B,A和B的生命周期分别是怎么过的?我们初学Android时候都接触过声明周期,当时给的解释是,onCreate是A...
2019-01-25 16:00:25
2796

原创 走进源码pipe、epoll,Android面试最常见Handler、Looper、Message问题总结与解答
【转载请注明出处:走进源码,Android面试最常见Handler、Looper、Message问题总结与解答优快云王智博】今天楼主以面试的角度,走进源码,去探索Handler、Handler、Looper、Message的奥秘。随着各种网络框架的普及,线程之间的通信再也不需要我们手动的创建Handler,然后handleMessage了,但是当我们想要创建一个主线程延时任务的时候,...
2019-01-16 22:25:20
3536
5
原创 我的草稿书
1.注解首先注解我们使用的时候是这样声明的,java中常见的注解有@Override、@Deprecated,@Retention 修饰运行时机 编译 运行时@Target 修饰类型 比如方法 类 成员变量@interface Path{ String value() defalut "&
2019-03-22 03:22:14
857
原创 markdown如何实现锚点功能
前言前言之前看了很多文章,一直都没有发现怎么在 markdown 里面去设置锚点,所以写一篇博客来记录下方法。
2019-03-22 03:17:37
33074
2
原创 Scroller startScroll() fling() 参数详解
fling()/** * Start scrolling based on a fling gesture. The distance travelled will * depend on the initial velocity of the fling. * * @param startX Starting point of the scroll (...
2019-03-20 15:46:48
1369
原创 常用工具解释
Node.jsNode.js平台是在后端运行JavaScript代码npmnpm其实是Node.js的包管理工具(package manager安装Node.js和npm
2019-03-15 12:32:41
242
原创 Java中锁学习笔记(Synchronized、ReentrantLock、Lock)
前言学习锁之前我们肯定要学习下线程,线程是CPU调度的最小单元。public class ThreadTest { public static int num = 0; public static void main(String[] args) { //1.开启10个线程去修改num的值 可以看到每次执行的结果不同 for (int i=0; ...
2019-03-14 01:10:32
299
原创 常用Java工具指令 JavaP
javap一个能够将class文件反汇编成人类可读的格式的工具。可以方便的查阅Java的字节码javap -p -v从一个基本的类的反编译说起让你读懂Java字节码文件...
2019-03-14 00:45:41
362
原创 Glide源码阅读随笔md
图片加载最重要的是几点,1.图片的缓存 2.网络请求模型和生命周期的联动Glide如何实现Activity和Application生命周期的联动的?参考:Glide官方文档Android图片加载框架最全解析(二),从源码的角度理解Glide的执行流程...
2019-03-13 11:53:17
148
原创 JVM、Dalvik以及ART的区别
简介JVMjava虚拟机,解析并运行字节码。DalvikAndroid平台的虚拟机,支持运行dex文件。.dex格式是专为Dalvik应用设计的一种压缩格式,适合内存和处理器速度有限的系统ARTART代表AndroidRuntime,在应用安装的时候就预编译字节码到机器语言,这一机制叫Ahead-Of-Time(AOT)预编译。在移除解释代码这一过程后,应用程序执行将更有效率,启...
2019-03-10 14:59:33
445
原创 Java学习笔记-transient关键字
简介java 的transient关键字为我们提供了便利,你只需要实现Serilizable接口,将不需要序列化的属性前添加关键字transient,序列化对象的时候,这个属性就不会序列化到指定的目的地中。使用流程工作与原理总结1)一旦变量被transient修饰,变量将不再是对象持久化的一部分,该变量内容在序列化后无法获得访问。2)transient关键字只能修饰变量,而不能修饰...
2019-03-08 11:44:58
153
原创 Java wait notify notifyAll-生产者消费者问题
参考如何在 Java 中正确使用 wait, notify 和 notifyAll – 以生产者消费者模型为例
2019-03-07 16:42:57
342
转载 谈谈Java中的语法糖
语法糖(Syntactic Sugar),也称糖衣语法,指在计算机语言中添加的某种语法,这种语法对语言本身功能来说没有什么影响,只是为了方便程序员的开发,提高开发效率。说白了,语法糖就是对现有语法的一个封装。Java作为一种与平台无关的高级语言,当然也含有语法糖,这些语法糖并不被虚拟机所支持,在编译成字节码阶段就自动转换成简单常用语法。一般来说Java中的语法糖主要有以下几种:泛型与类型...
2019-03-04 23:37:25
158
原创 Android MVP架构理解与主流框架
前言引用sanji2020的话读了很多MVC MVP MVVP的文章,觉得最好的一篇还是这一篇,读完之后理解的很透彻,后有根据Github上GeekNew项目。Material Design + MVP + RxJava2 + Retrofit + Dagger2 + Realm + Glide 基本涵盖了当前Android端开发最常用的主流框架,之后根据自己的思路整理了一份思维导图(仅限参...
2019-03-01 17:33:03
276
原创 MarkDown相关
MarkDown页内跳转实现1. 先定义一个锚(id) <span id="jump">Hello World</span> 2. 然后使用markdown的语法: [XXXX](#jump)
2019-02-27 23:25:19
165
原创 Android----EventBus原理及封装-开发利器
1. 前言1.1 什么是EventBus?github地址 : https://github.com/greenrobot/EventBus1.2 怎么使用?可以看到官网已经给了解释。定义一个Event类准备一个订阅者(声明并且注解一个方法),指定一下线程模型在生命周期中注册和解绑订阅者发送第1步定义的事件2. EventBus原理剖析这是官网的流程图,从左往右看可...
2019-02-27 23:12:52
756
原创 Android面试和知识点文章mark
Android面试Android 校招面试指南 春招收获阿里腾讯实习offer,学习、面试经验分享18年底Android面经分享(已获头条、顺丰、OPPO等大厂offer)Android 面试指南AndroidInterview-Q-AAndroid LearningNotes Android 面试 https://www.jianshu.com/p/089861329c1a...
2019-02-27 01:49:43
271
原创 Android面试---通过ScrollView滑动讲解OverScroller、Scroller原理
前言试想一下,我们希望 ScrollView 平滑滚动的操作时候,是怎么实现的呢?我们可以猜想下,当我们的调用 smoothScrollBy(int dx, int dy) 的时候,ScrollView 是怎么就能实现平滑移动的呢?smoothScrollBy执行过程在MotionEvent.ACTION_UP事件触发时调用startScroll()方法,该方法并没有进行实际的滑动操作,而...
2019-02-27 00:48:31
1331
1
原创 Android架构学习之google sample android-architecture
前言Android的架构,MVC、MVP、MVVM这些你一定听说过。网上的文章也有很多讲解MVC、MVP、MVVM的,但是还是很晦涩。这里我们可以看Google官网的应用架构指南,然后还有Google团队出的 Android架构样例 googlesamples/android-architecture。...
2019-02-26 18:35:03
493
原创 RxJava学习笔记、思维导图
前言什么是RxJava?RxJava – Reactive Extensions for the JVM – a library for composing asynchronous and event-based programs using observable sequences for the Java VM.这是github地址的解释,RxJava是使用观察者队列的异步事件流链...
2019-02-26 17:38:38
431
原创 学习笔记之IPC跨进程通信binder原理
前言:我们在多篇文章(AIDL进程间通信 Service主动修改Activity视图之回调传递 三(附github源码))[]、(最简单的Activity、Service进程间 AIDL通信指南二(附github源码))[]都讲到了binder,服务器端实现binder,客户端连接接收到binderProxy,那么binder底层的原理到底是什么?它是怎么实现跨进程通信的?ioctl()函数的...
2019-02-26 15:25:04
222
原创 Android源码 Linux系统调用poll、select、epoll学习笔记
参考:(源码解读poll/select内核机制)[http://gityuan.com/2019/01/05/linux-poll-select/](源码解读epoll内核机制)[http://gityuan.com/2019/01/06/linux-epoll/]
2019-02-26 11:50:05
871
原创 Android性能优化总结
启动优化区分进程,子线程异步初始化资源,服务懒加载(按需加载)sharepreference commit是阻塞的api,用applysp如果过大,做拆分操作asset读取资源异步化service初始化后延绘制优化参考:Android性能优化:那些不可忽略的绘制优化...
2019-02-26 03:01:52
143
转载 Mac下查看Git的安装目录
which git解释:查看 git 程序地址示例localhost:~ wangzhibo$ which git/usr/local/bin/gitMac下查看Git的安装目录
2019-02-25 12:02:04
12883
1
原创 什么是SurfaceView?和View有什么区别?Android里面什么地方用到了SurfaceView?
参考:SurfaceView学习笔记->什么是SurfaceViewAndroid SurfaceView入门学习
2019-02-25 11:56:58
477
原创 2019最全Android面试题总结-答案解读(持续更新中。。。)
设计模式依赖注入代理模式与动态代理参考厘米姑娘的 文章汇总|学习Android的一点一滴
2019-02-22 15:32:29
3624
原创 Android四大组件之Service的启动过程
过程概述1.客户端请求bindService,先会请求ActivityManagerService;2.ActvityManagerService再去找到对应的Service,让Service所在进程创建并启动Service;3.Service调用AMS.publishService()将Binder对象传递给AMS;4.AMS拿到的Binder对象同样为BinderProxy对象,然后...
2019-02-21 19:23:57
327
转载 一篇文章看明白 Android 图形系统 Surface 与 SurfaceFlinger 之间的关系
Android - SurfaceFlinger 图形系统相关系列一篇文章看明白 Android 系统启动时都干了什么一篇文章了解相见恨晚的 Android Binder 进程间通讯机制 一篇文章看明白 Android 从点击应用图标到界面显示的过程 一篇文章看明白 Activity 与 Window 与 View 之间的关系 一篇文章看明白 Android 图形系统 Surfac...
2019-02-21 17:28:37
790
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人