自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

yinhuanxu

我是一只无比耿直的程序猿

原创 Android中子线程真的不能更新UI吗?

Android的UI访问是没有加锁的,这样在多个线程访问UI是不安全的。所以Android中规定只能在UI线程中访问UI。但是有没有极端的情况?使得我们在子线程中访问UI也可以使程序跑起来呢?

2016-10-03 17:58:44 15290 44

原创 Mac OS 编译 Android 平台 FFmpeg

工具准备 FFmpeg 4.1.5 版本源码,下载链接:http://ffmpeg.org/download.html NDK ( android-ndk-r17c ),下载链接:https://developer.android.google.cn/ndk/downloads 配置修改 1、...

2020-03-03 12:37:29 159 0

翻译 【译文】kotlin1.3 版本的协程

原文链接:https://antonioleiva.com/coroutines/ 协程是 kotlin 中最让人激动的特性之一,使用它,你可以用一种优雅的方式来简化异步任务的工作,让代码更加可读和易于理解。 使用协程,你可以用同步的样式写异步代码,而不是传统的 Callback 方式来写。同步...

2019-05-28 19:20:23 511 0

原创 对 TCP 建立连接需要 3 次握手的理解

我觉得TCP的三次握手设计是很巧妙的。而为什么TCP建立连接需要三次握手?也是我学习时的疑惑,接下来谈下自己的理解

2017-08-13 17:13:03 751 0

原创 一种优化 ListView 初始化加载速度的方案

我在使用 ListView 的时候,有一个问题困扰我挺久:能不能控制 ListView 初始化时加载的Item数量?比如,如果我刚打开一个页面,ListView 关联 Adapter 就开始加载十几条数据,如果加载的 Item 是 TextView 还好,不会影响到速度,但如果是 Webvie...

2017-08-08 16:54:59 1214 0

原创 LruCache 源码分析

我在参加笔试的时候,有一道题是设计一个 LruCache,当时由于不理解原理而没有写出来,现在看了几遍源码,记录下笔记理清思路

2017-04-30 16:54:37 507 0

原创 图解反转单向链表

我总觉的反转链表的过程不是那么好理解,花了点时间画图来帮助理解

2017-04-19 12:18:58 6451 18

转载 排序算法总结

查找和排序算法是算法的入门知识,其经典思想可以用于很多算法当中。因为其实现代码较短,应用较常见。所以在面试中经常会问到排序算法及其相关的问题。但万变不离其宗,只要熟悉了思想,灵活运用也不是难事

2017-04-16 23:26:12 487 1

原创 二分查找的递归和非递归实现

二分查找的递归和非递归实现

2017-04-10 17:06:01 438 0

原创 Dagger2 原理分析

Dagger2 使用编译时注解 + APT 实现依赖注入,能带来什么好处呢?一个词:解耦。在项目越来越庞大的时候,Dagger2 就体现出强大之处了

2017-04-05 21:28:12 813 0

原创 为什么重写了equals(),还要重写hashCode()?

hashCode 方法用于散列集合的查找,equals 方法用于判断两个对象是否相等。为什么重写了 equals 方法,还要重写 hashCode 方法?

2017-04-04 19:46:49 6372 3

原创 剑指 Offer 专项训练

Java 语言实现,用于校招复习。

2017-02-28 12:42:06 545 0

原创 Retrofit 源码分析

我在半年前才开始接触 Retrofit,在那个时候这个框架已经很火了。现在寒假复习到这一块,也好久没写博客了,简单梳理了一下写成一篇文章。有不对的地方,望指正

2017-01-24 22:12:58 1196 0

原创 Android Binder跨进程通信原理分析

我们知道进程之间,虚拟地址不同,是不能直接通信的,这是一种保护机制。用户空间可以通过System calls(系统回调)与内核空间通信的,如果在内核空间中有一个模块,能够完成数据的转发,那么是不是两个进程就可以通信了呢?

2016-11-27 15:15:30 5992 3

原创 Java GC 机制与内存分配策略

收集算法是内存回收的方法论,垃圾收集器是内存回收的具体实现 为什么我们要了解学习 GC 与内存分配呢? 在 JVM 自动内存管理机制的帮助下,不再需要为每一个new操作写配对的delete/free代码。但出现内存泄漏和溢出的问题时,如果不了解虚拟机是怎样使用内存的,那么排查错误将是一项非常艰难的...

2016-11-10 00:00:07 6415 4

转载 Android RecyclerView工作原理分析(下)

在RecyclerView中存在一个叫“预布局”的阶段,当然这个是我自己作的翻译,本来叫pre layout,与之对应的还有个叫post layout的阶段,它们分别发生在真正的子控件测量&布局的前后。其中pre layout阶段的作用是记录数据集改变前的子控件信息,post layout...

2016-11-05 21:18:49 1951 0

转载 Android RecyclerView工作原理分析(上)

RecyclerView的基本使用并不复杂,只需要提供一个RecyclerView.Apdater的实现用于处理数据集与ItemView的绑定关系,和一个RecyclerView.LayoutManager的实现用于 测量并布局 ItemView。众所周知,android控件的绘制可以分为3个步骤...

2016-11-05 21:03:50 9993 1

原创 Android View的绘制流程三部曲

如果我们用面向对象的思维方式来思考,就会觉的View的绘制机制是很合理,很科学的。我们要在一张纸上画一幅画,首先我们要测量一下这幅画有多大吧,然后确定在纸的哪个地方画会显得比较美观,最后才是用画笔工具将画绘制在纸上。 在Android中也是一样的。View的绘制流程主要是指measure,layo...

2016-10-24 00:28:29 4588 1

原创 Android Service的绑定过程

通常我们使用Service都要和它通信,当想要与Service通信的时候,那么Service要处于绑定状态的。然后客户端可以拿到一个Binder与服务端进行通信,这个过程是很自然的。那你真的了解过Service的绑定过程吗?为什么可以是Binder和Service通信?

2016-10-18 10:10:07 3967 2

原创 Android Service的启动过程

刚开始学习Service的时候以为它是一个线程的封装,也可以执行耗时操作。其实不然,Service是运行在主线程的。直接执行耗时操作是会阻塞主线程的。长时间就直接ANR了。我们知道Service可以执行一些后台任务,是后台任务不是耗时的任务,后台和耗时是有区别的喔。 这样就很容易想到音乐播放器,...

2016-10-14 21:26:56 4800 2

原创 Android Context getSystemService分析

当我们希望获取到系统服务时,可以调用Context的getSystemService方法,那么getSystemService又是怎么工作的呢?Activity是一个Context,他调用getSystemService时,会调用到Context的包装类ContextWrapper的getSyst...

2016-10-11 17:08:16 11556 0

原创 Android Activity的启动过程

ActivityThread的main()方法究竟做了什么工作?main方法代码并不长,但行行珠玑。我也打开源码去看了main方法,之后还鼠标滑滑滑大致看了ActivityThread,发现了performLaunchActivity方法,这个方法分明就是用来启动Activity的,从源码的角度来...

2016-10-07 21:36:06 3416 2

原创 Android View的事件分发机制

准备了一阵子,一直想写一篇事件分发的文章总结一下,这个知识点实在是太重要了。当一个点击事件(MotionEvent)产生后,事件最先传递给当前的界面(Activity),这点很好理解的。 Activity再将事件传递给窗口(Window),然后Window将事件传递给顶级View(DecorVie...

2016-10-01 12:48:30 4259 0

原创 sleep() 和 wait() 的区别

sleep() 方法是线程类(Thread)的静态方法,让调用线程进入睡眠状态,让出执行机会给其他线程,等到休眠时间结束后,线程进入就绪状态和其他线程一起竞争cpu的执行时间。 因为sleep() 是static静态的方法,他不能改变对象的机锁,当一个synchronized块中调用了sleep...

2016-09-21 21:20:22 69513 17

原创 Android AsyncTask工作原理

AsyncTask能够适当简单的使用在UI线程,在没有任务线程和handler的情况下,这个类也允许执行后台操作并将结果显示在UI线程上

2016-09-21 10:28:06 3635 2

原创 Android中的线程池(二)

上一篇博客Android中的线程池(一),简单分析了线程池的内部工作的过程,有兴趣的同学可以去阅读下。那真的是简单分析,因为在那篇文章里,只从一个任务从提交到被执行的过程简单分析。事实上线程池的内部实现原理是挺复杂的

2016-09-20 13:52:28 1425 0

原创 Android中的线程池(一)

一直想写关于AsyncTask的实现原理,AsyncTask的实现是用到了线程池和消息机制的,关于Android中的消息机制我已经在博客里写过了,有兴趣的同学可以去阅读。 那这篇博客就一起来学习Android中的线程池。

2016-09-18 12:56:56 1658 0

原创 Android中的消息机制

最近写博客的时间,都是在晚上图书馆学习回到宿舍后,大概是11点半开始写,写着写着就1点多了,这还是我积累的比较充分了的情况下的,然后自己要看一遍再睡觉。第二天早上还要审稿后再发表。下星期开始调整写作时间,早睡早起学习效率才高。写一篇文章真的不容易,我会陆续写一个路线的博客,如事件分发机制,自定义V...

2016-09-16 11:58:58 3665 0

原创 ListView中的观察者模式

虽然现在RecyclerView很好用,也在逐渐替代ListView。Github 上也很多实用的封装。但是这些都不阻碍我们学习ListView优秀的源码设计。

2016-09-14 10:15:21 3803 6

原创 Java向下转型的意义

一开始学习 Java 时不重视向下转型。一直搞不清楚向下转型的意义和用途,不清楚其实就是不会,那开发的过程肯定也想不到用向下转型。其实向上转型和向下转型都是很重要的,可能我们平时见向上转型多一点,向上转型也比较好理解。 但是向下转型,会不会觉得很傻,我是要用子类实例对象,先是生成子类实例赋值给父...

2016-08-17 16:13:01 27104 50

原创 《Android开发艺术探索》笔记 — Activity的生命周期和启动模式

其实艺术探索这本书我很早就买了,传说中的中级工程师迈向高级工程师看的进阶书。哈哈哈!买了后怜香惜玉的看了几天。喔,IPC机制,View事件分发机制,消息机制,一个Drawable都能那么多知识点,好吧,我知道是我技术水平还没到达能看懂这本书。 于是,为了强行看懂书中贴出的源码,我去学了设计模式

2016-08-14 18:11:49 1832 0

原创 Java反射机制笔记

很多时候,java程序运行中,我们需要在运行时了解类的信息,得到类的实例,并且进而继续得到类的方法,构造函数,权限,变量以及其他信息。这时候我们需要用到一门技术,java反射反射说白了,就是把我们的一些文件,一些字符串,一些地址上具体的配置信息,能够把他们动态的在运行期实例化,并且我们能够操作这些...

2016-08-07 22:39:01 2033 3

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