![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
源码学习
文章平均质量分 93
流云易采
硕士
展开
-
Android开源框架Universal-Image-Loader学习四——LimitedMemoryCache的一些子集
LRULimitedMemoryCache源码:/** * (cache size limited)Size of all stored bitmaps will not to exceed size limit. * (删除策略LRU)When cache reaches limit size then the least recently used bitmap is delete原创 2015-05-03 09:51:21 · 1019 阅读 · 0 评论 -
Android开源框架Universal-Image-Loader学习三——UsingFreqLimitedMemoryCache源码阅读
Universal-Image-Loader的内存缓存策略1. 只使用的是强引用缓存 LruMemoryCache(这个类就是这个开源框架默认的内存缓存类,缓存的是bitmap的强引用)2.使用强引用和弱引用相结合的缓存有UsingFreqLimitedMemoryCache(如果缓存的图片总量超过限定值,先删除使用频率最小的bitmap)LRULimitedM原创 2015-04-30 15:16:25 · 1148 阅读 · 0 评论 -
Android开源框架Universal-Image-Loader学习二——LruMemoryCache源码阅读
Universal-Image-Loader的内存缓存策略1. 只使用的是强引用缓存 LruMemoryCache(这个类就是这个开源框架默认的内存缓存类,缓存的是bitmap的强引用)2.使用强引用和弱引用相结合的缓存有UsingFreqLimitedMemoryCache(如果缓存的图片总量超过限定值,先删除使用频率最小的bitmap)LRULimite原创 2015-04-28 08:37:25 · 2247 阅读 · 0 评论 -
Android中的Handler消息机制
转自:http://blog.csdn.net/liuhe688/article/details/6407225在分析Android消息机制之前,我们先来看一段代码:public class MainActivity extends Activity implements View.OnClickListener { private TextView stateT原创 2015-04-23 08:51:26 · 952 阅读 · 0 评论 -
Android开源框架Universal-Image-Loader学习使用1
一、工作流程:1、当请求显示图片,调用ImageLoader.displayImage(),首先会 1)计算显示图片的尺寸大小 2)判断该图片是否已存在缓存中,若No,跳到步骤3,若Yes,跳到步骤9 3)判断图片是否已存在本地,若No,跳到步骤4;若Yes,跳到步骤6 4)判断图片允许存储在本地,若No,跳转到步骤6;若Yes,跳到步骤5原创 2015-04-20 16:49:20 · 1043 阅读 · 0 评论 -
View机制深入学习(一)
函数调度:(基于Android5.1)1、ActivityThread类中有一个handleLaunchActivity的函数,该函数是创建Activity的地方。/** \frameworks\base\core\java\android\app\ActivityThread.java**/private void handleLaunchActivity(Ac原创 2015-09-13 20:11:57 · 1387 阅读 · 0 评论 -
Handler,Looper,Message,MessageQueue之间关系浅析
一、先看一下使用流程1.在子线程中使用Handler实例 /***********子线程使用Handler实例*********/ private class LooperThread extends Thread { public Handler handler; @Override public void run()原创 2015-06-16 08:42:41 · 1422 阅读 · 0 评论 -
Retrofit源码解析
square公司开源了一系列的优秀库,比如Retrofit,OkHttp,Picasso等, 前面简单分析了Picasso的源码,这里来分析下Retrofit的使用:一、gradle添加依赖compile 'com.squareup.okhttp:okhttp:2.4.0'compile 'com.squareup.okhttp:okhttp-urlconnection:2.4.0'compi原创 2016-05-23 08:54:51 · 12125 阅读 · 6 评论 -
Fragment源码解析
一、Fragment的简单使用:FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();transaction.add(R.id.radio1, tabFourFragment, tabFourFragment.getTag());transaction.remove(tabFourFrag原创 2016-05-18 19:11:34 · 4889 阅读 · 1 评论 -
View机制深入学习(五) 事件处理机制一
以TouchEvent为主,看一下View和ViewGroup内部是如何处理Input Events的; 首先来看事件的产生来源:一、获取事件:事件的来源可以分为“软件”,“硬件”两种; 主要的事件包含有: 按键事件(KeyEvent) :即物理按键按下产生的事件,相关的常用物理按键一般有HOME,BACK等 触摸事件(TouchEvent): 鼠标事件(MouseEvent)、轨原创 2016-05-10 17:26:37 · 2308 阅读 · 0 评论 -
View机制深入学习(四)View的事件分发机制
当发生点击事件后,事件会最先传递给当前的Activity,Activity调用dispatchTouchEvent来进行事件的dispatch;1、Activity#dispatchTouchEvent:/** \frameworks\base\core\java\android\app\Activity.java **/public boolean dispatchTo原创 2015-11-16 15:10:26 · 1193 阅读 · 0 评论 -
Handler机制深入解析
知乎上看到这样一个问题Android中为什么主线程不会因为Looper.loop()里的死循环卡死?,于是试着对Handler源码重新看了一下,其实Android的消息机制是Pipe+epoll,有消息时则依次执行,没消息时调用epoll.wait等待唤醒;由于Android中生命周期、UI绘制都是动过Handler实现的,因此自然不会发生阻塞卡死。1、创建Looper之间Java原创 2016-03-02 15:50:07 · 1301 阅读 · 0 评论 -
Volley源码分析
一、Volley框架图 根据图简单猜测Volley工作的流程,见右下角的注释,蓝色表示主线程(main thread),绿色表示缓存线程(cache thread),黄色表示网络线程(network threads);再寻找图中的关键字:queue(RequestQueue),cache queue,CacheDispatcher,NetworkDispatcher;原创 2015-06-19 11:04:47 · 3444 阅读 · 0 评论 -
ArrayMapy、SparseArray源码学习
ArrayMap和SparseArray是Android中提供用来替代HashMap实现内存优化的集合类,来具体看下其源码实现: 一、ArrayMap简单分析 1)存储原理: HashMap是使用一个table数组来存储;发生冲突时采用链地址法以链表或者红黑树的形式进行存储; 而ArrayMap使用的是两个数组,mHash数组用来存储hash值(顺序存储);mArray在对应位置存储(比如m原创 2016-04-21 22:14:13 · 906 阅读 · 0 评论 -
Android启动过程——init,Zygote,SystemServer
一、Android设备启动经历的三个阶段:Boot Loader;Linux Kernel;Android系统服务;每个阶段都有自己的启动画面。1、Android中第一个被启动的进程——init,init进程的PID为0,其他的服务都由其进行创建。它是通过解析init.rc脚本来构建出系统的初始运行状态的。init进程是在系统启动启动过程中启动的。2、init.rc语法规则:1)Act原创 2015-08-18 11:12:29 · 3948 阅读 · 0 评论 -
GSON源码解析
把之前做的笔记又重新整理了一下,发现简单只看了GSON的解析流程;1、GSON的两种解析使用方式:1)直接利用GSON中默认的反射机制来解析:Gson gson1 = new Gson();gson1.fromJson(str, Data.class);2)利用自定义的TypeAdapter来解析:// Builder模式GsonBuilder gsonBuilder原创 2016-03-13 20:58:10 · 1523 阅读 · 0 评论 -
Android开源框架Universal-Image-Loader学习无——WeakMemoryCache 和 FuzzyKeyMemoryCache
WeakMemoryCache 源码:BaseMemoryCache参见:http://blog.csdn.net/woliuyunyicai/article/details/45330867/** * Memory cache with {@linkplain WeakReference weak references} to {@linkplain android.graphic原创 2015-05-03 10:11:50 · 1114 阅读 · 0 评论 -
Android开源框架Universal-Image-Loader学习六——硬盘缓存策略
硬盘缓存策略:LimitedAgeDiscCache(设定文件存活的最长时间,当超过这个值,就删除该文件)UnlimitedDiscCache(这个缓存类没有任何的限制)继承关系:public class LimitedAgeDiscCache extends BaseDiscCachepublic abstractclass BaseDiscCach原创 2015-05-04 16:47:49 · 1333 阅读 · 0 评论 -
Service绑定形式启动过程
一、绑定形式Service的使用1)定义一个Service,注意重写onBind方法,返回一个IBinder对象public class MyService extends Service { public static final String LOG_TAG = "LOG_TAG"; private MyBinder mBinder = new MyBinde原创 2016-01-18 10:56:46 · 1414 阅读 · 0 评论 -
Service组件的启动机制深入学习
一、通过startService方式启动1、ContextWrapper#startService:/** @path: \frameworks\base\core\java\android\content\ContextWrapper.java **/@Overridepublic ComponentName startService(Intent service) {原创 2016-01-12 10:51:09 · 1121 阅读 · 0 评论 -
Activity组件启动过程(三)
承接上面文章《Activity组件启动过程(二)》中的分析,继续进去看startSpecificActivityLocked:11、ActivityStackSupervisor#startSpecificActivityLocked:/** @path: \frameworks\base\services\core\java\com\android\server\am\ActivityS原创 2015-12-28 16:44:27 · 1280 阅读 · 0 评论 -
Activity组件启动过程(二)
前面启动过程图:(源码基于Android5.1) 获得到ActivityManagerProxy的实例后,会通过ActivityManagerProxy将启动Activity组件的相关信息写入到Parcel对象data中,然后发送一个类型为START_ACTIVITY_TRANSACTION的进程间通信请求给AMS(ActivityManagerService),接下来的工作原创 2015-08-30 16:39:50 · 1956 阅读 · 1 评论 -
Binder学习一——基础数据结构
在看Binder源码时,总是接触到很多这些莫名其妙的struct,故依据几本参考资料先把这些数据结构的意义即关系整理以下: /* \kernel\goldfish\drivers\staging\android\binder.c/ 1、binder_work://表示binder驱动中进程所要处理的工作项struct binder_work { struct list_head ent原创 2015-07-07 08:44:50 · 1464 阅读 · 0 评论 -
Binder机制解析(一)
一、Binder通信流程简单概述(一)Binder用以Android内部的进程间通信,Binder相对于传统的Linux内核IPC(管道,信号,消息队列,共享内存,插口等)具有仅需拷贝一次内存的好处,进而提高了效率,也节省了内存; 从设计模式来看,Binder通信可以抽象为上图C/S模式,数据通信流程已经足够清晰。从中可以看出:1、Client组件获得Service组原创 2015-07-13 16:51:56 · 2041 阅读 · 0 评论 -
Activity启动过程(一)AMS
在前面《Android启动过程》中提到了System进程启动ActivityManagerService服务,AMS是由Android提供的用于管理Activity(不仅仅指Activity,还包括其他三个组件)运行状态的系统进程,则是平时编写APK应用程序时使用得最频繁的一个系统服务。 AMS是通过ActivityStack(和其它数据结构)来记录、管理系统中的Activity(和其它原创 2015-08-25 10:22:26 · 2605 阅读 · 0 评论 -
Volley简单学习使用五—— 源码分析三
一、Volley工作流程图:二、Network 在NetworkDispatcher中需要处理的网络请求,由下面进行处理: NetworkResponse networkResponse = mNetwork.performRequest(request);看一下mNetwork的定义:(定义在NetworkDispatcher中) /** T原创 2015-06-25 08:46:58 · 1090 阅读 · 0 评论 -
View机制深入学习(三) View中的消息传递及InputManagerService
以TouchEvent为主,看一下View和ViewGroup内部是如何处理Input Events的;一、View中TouchEvent的投递过程: 现在版本的Android中、事件处理者已经不由InputEventReceiver来承担,而是通过多种形式的InputStage来进行分别处理。如:final class SyntheticInputStage e原创 2015-09-19 19:30:14 · 8650 阅读 · 0 评论 -
Android EventBus源码解析
一、EventBus的简单使用流程《Android EventBus的简单使用》中介绍了EventBus的简单使用,从 EventBus.getDefault().register(this);开始,注意在类中实现相应的onEvent方法: public void onEventMainThread(ActivityToServiceEvent even原创 2015-12-24 19:54:24 · 850 阅读 · 0 评论 -
AsyncTask源码解析
AsyncTask的使用与解析原创 2015-10-29 14:41:27 · 725 阅读 · 0 评论 -
View机制深入学习(二)——View树的遍历
一、遍历View树的入口是ViewRootImpl的scheduleTraversal函数/** \frameworks\base\core\java\android\view\ViewRootImpl.java **/void scheduleTraversals() { if (!mTraversalScheduled) { // 判断当前是否已经在做遍历原创 2015-09-16 09:59:12 · 2947 阅读 · 0 评论 -
Volley简单学习使用四——源码分析二
一、Volley工作流程图:继续从CacheDispatcher和NetworkDispatcher开始看起。二、CacheDispatcher: 一个线程,用于调度处理走缓存的请求。启动后会不断从缓存请求队列中取请求处理,队列为空则等待,请求处理结束则将结果传递给ResponseDelivery 去执行后续处理。当结果未缓存过、缓存失效或缓存原创 2015-06-23 10:12:46 · 977 阅读 · 0 评论 -
Volley简单学习使用二——Request
一、首先从每个POST或者GET请求的构造主体看起:XXXRequest(一)StringRequest源码如下:public class StringRequest extends Request { private final Listener mListener; /** * 可以看到最终构造请求交由Request类去实现,HTTP的请求和响应均是由原创 2015-06-17 16:30:53 · 1196 阅读 · 0 评论 -
Android.mk文件解析
一、一个简单的Android.mk文件如下:LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE := native-interfaceLOCAL_SRC_FILES := video.c \ adpcm.c \ audio.c \ sip.c \原创 2015-06-10 15:43:11 · 1586 阅读 · 0 评论 -
Picasso源码解析
一、Picasso使用:gradle:compile 'com.squareup.picasso:picasso:2.5.2'使用:Picasso.with(this).load("http://...../photo3.jpg").into(myImg);自定义的使用方法:Picasso picasso = new Picasso.Builder(this) .memoryCach原创 2016-05-15 17:03:14 · 8165 阅读 · 2 评论