自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

TellH的博客

总结,分享,提升

  • 博客(32)
  • 收藏
  • 关注

原创 深入理解JVM方法调用的内部机制

我们都知道,Java源代码需要编译成字节码文件,由JVM解释执行,而方法调用可以说是很常见的操作。Java不同于C++,Java中的实例方法默认是虚方法,因此父类引用调用被子类覆盖的方法时能体现多态性。下面我们来看看JVM是如何完成方法调用操作并实现动态绑定的。栈帧结构为了能高效地管理程序方法调用,有条不紊地进行嵌套的方法调用和方法返回,JVM维护了一个栈结构,称为虚拟机方法栈(这里没考虑Nativ

2017-08-18 15:11:42 6271

原创 一起来造一个RxJava,揭秘RxJava的实现原理

RxJava是一个神奇的框架,用法很简单,但内部实现有点复杂,代码逻辑有点绕。我读源码时,确实有点似懂非懂的感觉。网上关于RxJava源码分析的文章,源码贴了一大堆,代码逻辑绕来绕去的,让人看得云里雾里的。既然用拆轮子的方式来分析源码比较难啃,不如换种方式,以造轮子的方式,将源码中与性能、兼容性、扩展性有关的代码剔除,留下核心代码带大家揭秘RxJava的实现原理。什么是响应式编程首先,我们需要明确,

2017-05-10 15:33:46 36385 20

原创 你真的懂Java泛型吗

泛型实现参数化类型的概念,使代码可以应用于多种类型,解除类或方法与所使用的类型之间的约束。在JDK 1.5开始引入了泛型,但Java实现泛型的方式与C++或C#差异很大。在平常写代码用到泛型时,仿佛一切都来得如此理所当然。但其实Java泛型还是有挺多tricky的东西的,编译器在背后为我们做了很多事。下面我们来看看有关Java泛型容易忽视的点。

2017-05-07 11:40:43 4215

原创 select/poll/epoll到底是什么一回事

面试题:说说select/poll/epoll的区别。 这是面试后台开发时的高频面试题,属于网络编程和IO那一块的知识。Android里面的Handler消息处理机制的底层实现就用到了epoll。

2017-05-04 14:08:47 2925

原创 浅谈Java反射的实现原理

Java反射的实现原理

2017-04-30 10:54:54 8114 4

原创 从字节码角度理解JVM异常处理机制的原理

前几天看到一条阿里巴巴的面试题:你了解try-catch块的实现原理吗? 我服,阿里的面试题就是有深度啊。要答好这一题,我觉得需要反编译一下.java源文件,因为字节码面前了无秘密。

2017-04-28 20:38:57 3305 1

原创 ThreadPoolExecutor源码初探

ThreadPoolExecutor线程池

2017-03-28 22:02:07 1129

原创 图解Activity的启动过程

由于Activity的启动涉及大量IPC和Binder方面的知识,因此了解这方面的知识后再来看Activity启动的相关源码可能不会那么吃力。

2017-02-26 17:13:17 6265 2

原创 图解+源代码 全面理解Android View事件分发

View事件分发是Android里面非常重要的知识点,我查阅了很多资料,新建demo分析Log日志加以验证,总结成这篇博文。宏观的角度View 事件分发涉及到三种角色,三个方法,三种重点事件,分别是Activity,ViewGroup,View;dispatchTouchEvent, onInterceptTouchEvent,onTouchEvent和ACTION_DOWN,ACTION_MOVE

2017-02-21 21:35:52 1010

原创 浅析AIDL的使用和工作原理

AIDL是一种接口定义语言,用于生成可在Android设备上两个进程之间进行进程间通信(IPC)的代码。AIDL的使用新建一个aidl文件,定义进程间通信的接口// IStudentManager.aidlpackage com.tellh.androidart;// Declare any non-default types here with import statementsimpor

2017-02-14 15:41:25 1271

原创 正则表达式必知必会

正则表达式必知必会本文共有2571字,阅读耗费11分钟。本文首发于个人博客:http://tanlehua.top/posts/tech/others/learn-regex/

2016-10-06 15:21:54 4597 1

原创 消灭模板代码,自定义AndroidStudio文件模板(2)

在上一篇讲到的自定义AndroidStudio文件模板的方法,但这种方法虽然简单却只能一次生成一个文件。有没有方法能一键生成一套文件呢?

2016-08-13 12:53:37 3015

原创 消灭模板代码,自定义AndroidStudio文件模板(1)

Previously我们日常开发肯定会或多或少遇到写模板代码的时候,比如写Adapter、写单例类、写用Parcelable实现序列化的相关代码、写实现Mvp架构的相关接口等等。但作为一个追求优雅编码的人,我一直崇尚“Write the code you have to write ”,快速高效地开发。这系列文章将分享如何将AndroidStudio打造成消灭模板代码的利器。照葫芦画瓢当我们在工程中

2016-08-12 23:08:26 1893 1

原创 用最优雅的方式startActivity

相信很多人看到标题startActivity可能会轻蔑一笑,启动Activity不是Android开发里基础得不能再基础的内容吗? 但相信点进来的各位看官都是追求优雅编码的开发者:) 。我要用一个优雅的姿势,最小的代码来启动一个Activity。

2016-08-04 13:33:39 19681 15

原创 Huffman编码解压缩的通俗讲解

前言好久没写博客了,主要是各种事缠着,难以抽出时间。这两个月以来,由于项目需要,我也逼着自己学到了很多,什么java后台,web前端,还有万恶的OpenCV图形处理……,呵呵,全栈:( 。但对Android的学习我始终不肯放下。但是今天这篇博客不是关于Android的,而是算法的相关应用–哈夫曼压缩。这是数据结构与算法实验里面的一个项目,网上关于这方面的资料很多,但大多数博客都是随便讲讲然后扔下代码

2016-04-30 14:56:14 9604 9

原创 解读Google官方SwipeRefreshLayout控件源码,带你揭秘Android下拉刷新的实现原理

前言想必大家也发现,时下的很多App都应用了这个Google出品的SwipeRefreshLayout下拉刷新控件,它以Material Design风格、适用场景广泛,简单易用等特性而独步江湖。但在我们使用的过程中,不可避免地会发现一些bug,或者需要添加某些特性来满足需求。出现这些问题,最好的方法就是解读源码,理解它实现的原理,并且在理解源码的基础上修改源码,达成需求。然而不知为何,至今还没有一

2016-03-02 22:42:04 10771 7

原创 实现类似微信Viewpager-Fragment的惰性加载,lazy-loading

前言今天起床,拿起手机开机第一时间当然是打开微信了,左右滑动Viewpager,发现它使用了一种叫惰性加载,或者说懒加载(lazy-loading)的方式加载Viewpager中的Fragment。效果如图: 什么是lazy-loading呢?顾名思义就是在必要的时候才加载,否则不进行View的绘制和数据的加载。原因是Viewpager一次只会显示一个页卡,那么刚开始的时候,只需加载第一张Frag

2016-02-20 20:47:36 12441 8

原创 偷懒新姿势,打造属于RecyclerView的万能适配器Adapter和ViewHolder

前言昨天开始接触江湖口碑很好的RecyclerView,事实上,我已经被她的强大所征服了!资源回收,数据绑定,布局显示,分割线,Item动画多个模块高度解耦,灵活优雅。其实,RecyclerView在使用上已经是相当简单了(个人觉得),但仍有很多代码是可以加以封装的。今天受简书上一篇博文的启发,作为写代码喜欢优(tou)雅(lan)的人,想到了一种封装方式,打造万能适配器,供大家食用。正统模式:pu

2016-02-15 21:56:07 9166 3

原创 判断Listview滑到顶部的最精准方案,解决Listview设置EmptyView与SwipeRefreshLayout冲突

故事发生的背景SwipeRefreshLayout是谷歌自家控件,提供下拉刷新的功能。然而这个控件简单易用的同时也有一个令人头疼的缺点,那就是它里面只能包含一个子View!有一天,需求来了,需要在为Listview添加EmptyView和下拉刷新,同时当显示EmptyView时也要求有下拉刷新。尝试与探索大家都知道,设置EmptyView需要把它放在一个容器内。这还不简单,SwipeRefreshL

2016-02-14 13:29:01 4301 1

原创 用全屏DialogFragment代替Activity,结合ViewPager展示图片

最近在知乎上看到一篇很不错的分享,关于Fragment的一些用法和开发经验,其中提倡用全屏的DialogFragment代替Activity处理一些特殊的场景,比如用户点击item触发打开一些内容详情页,相册点击小图片时会将图片全屏放大展示...等等的这些场景都可以考虑用全屏的DialogFragment来代替Activity来代替进行视图的展示。由于具体的代码逻辑非常简单,我就直接上代码了,注释

2016-01-26 23:28:02 3703 1

原创 让人惊叹的Android Studio快捷键总结

Win/Linux:alt+up/down;Mac:ctrl+up/down实现在类或方法间瞬移光标。 Win/Linux:ctrl+f12;Mac:cmd+f12弹出文件中的类和方法结构图,并可以查找并定位类成员和方法。按esc取消。 Win/Linux:ctrl+alt+h;Mac:ctrl+alt+h展示一个方法调用路径层级图 Win/Linux:ctrl+shift+i;Mac:alt

2015-11-25 20:57:10 3658 4

原创 《第一行代码--Android》读书笔记之网络编程

浅用WebView简单配置布局 <WebView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/webview_1"> </WebView>具体代码public class MainActivity

2015-11-23 09:52:06 1522

原创 《第一行代码--Android》读书笔记之多线程与服务

服务(service)是Android中实现程序后台运行的解决方案。服务并不是运行在一个独立的进程中,而是依赖于创建服务所在的应用程序的进程。实际上,服务并不会自动开启线程。android多线程编程线程的基本用法新建一个类继承自Thread,重写父类的run()方法,在里面写耗时的逻辑。 class MyThread extends Thread{ @override

2015-11-22 12:50:00 1218

原创 《第一行代码--Android》读书笔记之使用通知和多媒体

使用通知(Notification) 我发现很多android系统的特色服务都是需要获得~Manager来管理的,比如LocalManager(获取定位服务),SensorManager(获取光照传感器服务)等等。通知属于系统的特色服务,需要一个NotificationManager来管理。 NotificationManager=(NotificationManager)getSystemS

2015-11-21 20:05:24 1181

原创 《第一行代码--Android》读书笔记之内容提供器

内容提供器(Content Provider)主要用于在不同的应用程序之间实现数据的共享功能,是android的四大组件之一。内容提供器的用法一般有两种,一种是使用向右的内容提供器来读取和操作相应程序中的数据;另一种是创建自己的内容提供其给自己程序要共享出去的数据提供外部访问接口。访问其他应用程序中的数据 通过Context中的getContentResolver()方法得到ContentReso

2015-11-21 10:19:01 880

原创 《第一行代码--Android》读书笔记之数据存储

文件存储:有用android的文件存储用的是java IO流那一套,所以这里先简单地总结一下java IO的一些重要知识点。 IO流分为两大类,字节流和字符流,它们之间的桥梁是outputStreamWriter和inputStreamReader。字节流,处理一些二进制编码的文件,比如MP3,音频文件的读取和写入用字节流处理会方便一些。为了能够提高读写效率,一次性把数据写、读。我们采用D

2015-11-20 22:09:19 1120

原创 《第一行代码--Android》读书笔记之广播机制

广播的类型标准广播(Normal Broadcasts)是完全异步执行的广播,在广播发出后,几乎所有的广播接受器都同一时间接收到这条广播消息,放射性传播的消息。有序广播(Ordered Broadcasts)是同步执行的广播,在广播发出后,只有一个广播接收器接收到这条广播消息,它在处理完消息后可以选择继续串型传播这条消息,也可以选择截断这条消息的传播。接受系统广播 要接收广播,首先当然要创

2015-11-19 17:35:46 1056

原创 《第一行代码--Android》读书笔记之碎片

碎片的基本用法: 碎片(fragment)是能嵌在活动中的UI片段,相当于mini型的Activity,有完整的布局,和生命周期。一个简单的碎片的创建过程: 新建一个碎片布局,比如,fragment.xml自定义一个继承自Fragment类的类,并重写onCreateView()方法,动态加载碎片布局。在被嵌入碎片的Activity的布局文件中加入< fragment>标签,要注意添加an

2015-11-19 13:12:38 1428

原创 《第一行代码--Android》读书笔记之UI篇

比较难掌握的UI控件ProgressBarXML属性: android:progressBarStyle:默认进度条样式 android:progressBarStyleHorizontal:水平样式 android:progress:初始化进度条的值 android:max:最大进度值 style=”?android:attr/progressBarStyleHorizontal”:设

2015-11-18 15:06:50 923 1

原创 《第一行代码--Android》读书笔记之日志工具Log与Activity

日志工具LogActivityActivity的创建与注册在Activity中使用MenuIntent之于活动创建ActivityIntent传递数据的使者活动的生命周期活动的启动模式启动活动的最佳写法随时随地退出程序日志工具LogLog.v(String tag,String msg);//verbose级别,最琐碎 Log.d(String tag,String msg);

2015-11-17 20:21:31 2214

原创 《第一行代码--Android》读书笔记之前言

如今的移动开发风起云涌,作为一个在校大二学生,我也不可避免地入了Android开发的坑。我开始起笔写这一读书笔记系列的今天已经是11月中旬了,不由得感叹,时间过得真快啊,转眼间又接近学期尾了,却犹如昨天才开学呢。说到底,我还是这个学期开学才开始学java呢,因为大一学了C++的原因,java的语法掌握得还是很快。所以我用了两个星期把学校的java教科书自己自学看完,对java的基础语法有了大概的了解

2015-11-17 20:11:21 1191

原创 【内功修炼】二叉树的那些事

二叉树的那些事最近上数据结构的课讲到了二叉树,课上听得云里雾里的,妈蛋,还不如老子自学呢!尽管具体算法都基本搞懂,但知识需要总结才能串起来。目录:二叉树的那些事目录二叉树的创建与删除类似于广义表的创建算法利用前序和中序遍历的递归创建算法递归删除算法二叉树遍历的非递归遍历算法二叉链表的二叉树前序遍历中序遍历后序遍历三叉链表的二叉树前序遍历中序遍历后序遍历总结二叉树的创建与

2015-11-09 13:42:02 1046

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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