- 博客(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
原创 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高级编程(第三版)中文版高清PDF文档
2014-08-15
android封装了常用功能的ioc框架
2014-04-06
chm文档生成器
2014-04-05
android http 文件上传遇见的难题!!!求大神指点!!!
2014-05-23
TA创建的收藏夹 TA关注的收藏夹
TA关注的人