自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

笨鸟的专栏

转行了

  • 博客(28)
  • 资源 (7)
  • 问答 (1)
  • 收藏
  • 关注

原创 Android LruCache源码简析

LruCache源码解析缓存置换算法:LRU,LFU,FIFOLRU:淘汰最长时间未使用的对象LFU:淘汰一段时间内使用最少的对象,也就是淘汰使用频率最低的对象 FIFO:frist in first out,先进先出源码解析LruCache是线程安全的,对maxSize、map的操作,都有用synchronizedpackage android.support.v4.ut...

2018-03-31 14:54:57 266

转载 关于thread.join()

在很多情况下,主线程生成并起动了子线程,如果子线程里要进行大量的耗时的运算,主线程往往将于子线程之前结束,但是如果主线程处理完其他的事务后,需要用到子线程的处理结果,也就是主线程需要等待子线程执行完成之后再结束join()的作用是:“等待该线程终止”,这里需要理解的就是该线程是指的主线程等待子线程的终止。也就是在子线程调用了join()方法后面的代码,只有等到子线程结束了才能执行。public f...

2018-03-30 10:52:11 165

原创 java 深入理解volatile关键字

一、首先要说明Java内存模型:参考资料1、Java为了保证其平台性,使Java应用程序与操作系统内存模型隔离开,需要定义自己的内存模型。在Java内存模型中,内存分为主内存和工作内存两个部分,其中主内存是所有线程所共享的,而工作内存则是每个线程分配一份,各线程的工作内存间彼此独立、互不可见,在线程启动的时候,虚拟机为每个线程分配一块工作内存,不仅包含了线程内部定义的局部变量,也包含了线程所需要使...

2018-03-29 15:24:41 176

原创 从源码看Activity启动过程(三)AMS-ActivityThread/ApplicationThread-实例化Activity

1、ActivityThread源码解析public final class ActivityThread { //一些重要变量 final ApplicationThread mAppThread = new ApplicationThread(); final Looper mLooper = Looper.myLooper(); //这个mH就是当前进程UI线程的handler...

2018-03-28 10:56:55 630

原创 从源码看Activity启动过程(一)LaunchActivity

本文以点击桌面快捷方式启动app来看源码Launcher process    ->   Binder    ->     System process    ->    Binder     ->        Target processLauncherActivity  -> ActivityManagerProxy ->AMS -> Applica...

2018-03-27 20:07:33 826

原创 从源码看AndroidManagerService(二)简单了解ActivityManager与AMS的通信

1、 ActivityManager、 ActivityManagerNative、 IActivityManager  从ActivityManager源码可以看出几乎每个方法都有ActivityManagerNative.getDefault().xxx(),它只是对ActivityManagerNative的一层包装,而从ActivityManagerNative的单例的创建可知它与AMS通...

2018-03-27 19:57:57 640

原创 Zygote进程的启动、功能

1、简单了解Android系统启动时做的事情    |---------------Android RunTime---------------------------|---------Application Framework-----------|    RuntimeInit  ->  ZygoteInit  -> Zygote  ->  SystemServer  -&...

2018-03-22 18:12:43 687

原创 Android文件缓存管理

gitHub地址1、CacheManager缓存管理类,该类用Map缓存了文件目录及该目录对应的缓存管理器key:dirPath  value:DiskCache为了节省内存,把缓存写入同一个目录,这样Map只会缓存一个键值对package xxx.cache;import android.text.TextUtils;import java.util.HashMap;import jav...

2018-03-20 19:00:33 1796

原创 ThreadPoolExecutor源码笔记(一)父类和实现的接口

public interface Executor { // 执行任务 void execute(Runnable command);}public interface ExecutorService extends Executor { // 不让再submit新的任务了,但是之前提交的会继续执行完。 void shutdown(); // 不让再submit新...

2018-03-15 18:12:21 253

原创 从源码看AndroidManagerService(一)AMS的启动

ActivityManagerService是在SystemServer中启动的。SystemServer中启动了一系列的系统服务1、SystemServer.javaSystemServer服务的启动在ZygoteInit.main() { startSystemServer()}。是在startSystemServer()中启动的系统服务之一。public final class System...

2018-03-15 15:59:23 552 1

原创 OkHttp源码阅读(四)拦截器、缓存拦截器实现、磁盘缓存

1.拦截器实现拦截,缓存拦截器实现,顺带了解下磁盘缓存(从源码可知默认只缓存GET请求的数据)默认缓存设置的入口okHttpClient.newCall(request).execute()final class RealCall implements Call { @Override public Response execute() throws IOException { sync...

2018-03-15 10:31:50 231

原创 OkHttp源码阅读(三)对Http2.0的支持

HTTP1.1与HTTP2.0效果对比HTTP2.0协议中文翻译1、OkHttp相同host的请求分享一个socket    这样进入一个页面时同时发起多个host相同的请求,只需要创建一个socket,多个请求共享。    避免了频繁创建socket的开销2、OkHttp Gzip压缩    对传输的数据进行了压缩,那么传输效率肯定就增加了。    其原理是对一个文件先进行ZL77算法压缩,再进...

2018-03-14 19:15:36 3586 2

转载 Android电量监控与优化

仅适用于android5.0以上系统。1、使用Battery Historian对耗电记录文件进行分析这篇文章里有讲如何通过adb命令获取某一段时间内电量消耗记录文件,然后用Battery Historian工具导入文件,分析电量消耗情况。2、耗电量分析原理系统提供的接口:./frameworks/base/core/java/com/Android/internal/os/PowerProfil...

2018-03-14 11:56:41 2277

原创 Android自定义日历控件(附效果图)

参考了一些网上的资料,针对自己需求做了一些修改。没有难点,只是细节特别多。package xxx.view;import android.content.Context;import android.content.res.TypedArray;import android.graphics.Bitmap;import android.graphics.BitmapFactory;im...

2018-03-14 10:54:16 4750 3

原创 OkHttp源码阅读(二)Dispatcher

Dispatcher做的事很简单默认包含一个corePollSize为0的线程池,闲置一段时间后所有线程都会销毁还有三个队列,等待请求的队列、异步请求中的队列、同步请求中的队列设置并发数量限制,不断把readyAsyncCalls中请求往runningAsyncCalls中添加,所有请求结束时回调idleCallbackpublic final class Dispatcher { pri...

2018-03-13 15:21:03 154

转载 CMake配置编写官方文档

CMake编译配置官方文档

2018-03-12 15:21:39 507

原创 TODO 捕获java层、native层异常

标记下

2018-03-12 14:25:50 611

原创 OkHttp源码阅读(一)连接池的复用

public final class ConnectionPool {       /**     * Background threads are used to cleanup expired connections. There will be at most a single * thread running per connection pool. The thread pool ...

2018-03-09 18:08:16 574

原创 OkHttp源码阅读笔记

参考一:OkHttp源码解析参考二:OkHttp基于源码的核心理解参考三:OkHttp3源码分析OkHttp3自定义Dns解析的实现插入:关于OkHttp的cookie,代码在   BridgeInterceptor  中OkHttp请求时的cookie放在header中key为"Cookie",value为一个字符串由"name=value;name2=value2;"组成的cookie是从re...

2018-03-08 19:06:12 165

原创 Android Handler源码解析

之前看过好几次Handler源码,但是时间一久就印象模糊了,还是自己写笔记好涉及Looper、ThreadLocal、Thread一、Handler    1、handler创建public Handler(Looper looper, Callback callback, boolean async) { mLooper = looper; mQueue = lo...

2018-03-08 11:41:42 138

原创 Android准确判断App前后台切换

/** * 前后台切换判定逻辑: * 1、连续2次stop * 2、如果连续stop之前有连续start,需要用连续stop次数减去连续start次数 * 只有start、stop才是进入和退出一个页面的判定节点,resume、pause都不行 */public class AppBackgroundManager { /** 一些状态基用于判断用户是否在前台 **/ ...

2018-03-08 10:01:37 2051

原创 Gson解析要防止Bean混淆的原因

大多数在这篇文章已经写的很清楚了补充1:Gson解析时获取bean中字段名由上面可以看出Gson是通过field.getName()拿到bean的字段名,如果代码混淆,获取的就是混淆后的名字。返回一个Map,key:bean的字段名  value:bean的字段field补充2:json解析出来后怎么与bean的字段对应上补充3:Gson解析出来一个字段的值后,给bean对应字段赋值Gson序列化...

2018-03-07 19:33:17 2624

原创 Android软键盘高度、展开、关闭监听

软键盘这块的代码在framework层,正常是无法获取的,但是可以软键盘弹起与关闭时,会触发GlobalLayoutListener可由此实现监听。public class KeyBoardStateUtil { private OnKeyBoardStateListener mListener; private View mRootLayout; privat...

2018-03-07 19:13:12 451

原创 Glide源码阅读(一 补充) Glide单例初始化做的事

GlideBuilder中 RequestManager中有持有Glide的对象,在创建RequestManager时就有初始化Glide对象Glide createGlide() { if (sourceService == null) {//图片下载线程池 final int cores = Math.max(1, Runtime.getRuntime(...

2018-03-06 20:17:01 304

原创 Glide源码阅读(四)内存缓存、磁盘缓存、跳过缓存

一、内存缓存实现com.bumptech.glide.util.LruCache<T, Y>中,通过LinkedHashMap做内存缓存Engine中,MemoryCache.put(EngineKey, EngineResource);添加到LinkedHashMap中。EngineKey组成:public EngineKey(String id, Key signature, in...

2018-03-06 20:03:48 1529

原创 Glide阅读笔记(三)图片真正加载、解码、图片尺寸

    public Target<TranscodeType> into(ImageView view) { Util.assertMainThread(); if (view == null) { throw new IllegalArgumentException("You must pass in a non null V...

2018-03-06 16:54:18 945

原创 Glide源码阅读笔记(二)全局配置,https自签名处理,自定义图片下载

自定义GlideModule1、通过<meta-data/> 配置自定义GlideModule,该Module可以配置Glide内存缓存、硬盘缓存、https请求等全局配置        1)GlideModule 通过自定义GlideModule,全局改变Glide行为的一个方式,通过全局GlideModule配置Glide,用GlideBuilder设置选项,用Glide注册Mod...

2018-03-06 14:25:27 290

原创 Glide源码阅读笔记(一)生命周期管理,RequestManager,asBitmap()/asGif(),全局配置等

Glide的生命周期管理【创建一个空白的Fragment,该fragment监听所在页面的生命周期,并传递给lifecycler中监听器】1)Glide.java中: public static RequestManager with(Fragment fragment) { RequestManagerRetriever retriever = RequestMan...

2018-03-05 19:38:12 1092

android哈希曼图片压缩支持armeabi-v7a

利用jepg库开启哈希曼压缩,去除alpha通道,压缩后图片不失真,支持armeabi、armeabi-v7a

2018-03-12

ECMAScript 6新特性

本人看过《深入浅出ES6》后把一百多页去除水分,总结成十来页的文档,方便快速入门。

2017-02-16

Android高级编程(第三版)中文版高清PDF文档

在网上找这本书的电子书,在CSDN看到有写着完整版的,实际上却是解压不了的,还有给个失效链接,骗积分的。挺坑的。 android本来就开源,学习资源当然也应该共享,尤其是这种并不算多么机密的资料。于是我决定自己传真正的电子书上去,省得大家找了。

2014-08-15

JNI的使用与理解

该文档由大牛编写,由浅入深讲解的JNI和NDK开发技术,仔细看懂该文档,基本就能掌握JNI开发技术了。

2014-07-11

android封装了常用功能的ioc框架

1自动注入框架(只需要继承框架内的application既可) 2图片加载框架(多重缓存,自动回收,最大限度保证内存的安全性) 3网络请求模块(继承了基本上现在所有的http请求) 4 eventbus(集成一个开源的框架) 5验证框架(集成开源框架) 6 json解析(支持解析成集合或者对象) 7 数据库(不知道是哪位写的 忘记了) 8 多线程断点下载(自动判断是否支持多线程,判断是否是重定向) 9 自动更新模块 上拉加载下拉刷新 10 一系列工具类

2014-04-06

chm文档生成器

输入目录选择包含所有总结文件的最大目录即可,内部会过滤 过滤规则 1.后缀为 .txt 2.文件名为 day[数字]+总结 3.文件内容长度大于 800 方便遇到某个不懂的知识点可以快速查找总结,或者定位到某天的内容,当然也方便回答老师的问题

2014-04-05

java反编译工具

可以通过该工具直接查看jar包里的所有.class文件,其实不用多说,你懂的。

2014-04-05

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

TA关注的人

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