
源码分析
文章平均质量分 88
JohanMan
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
epoll使用实例
Android的Looper机制中,MessageQueue阻塞的方式是通过Linux的epoll机制,IO多路复用机制,这里不说原理,说一下epoll使用机制,还是参数的解析。原创 2022-08-17 15:38:23 · 527 阅读 · 1 评论 -
Glide源码解读之绑定生命周期
今天有空,稍微解读了一下glide加载图片框架源码,glide源码比较多,除了弄清楚主流程,对我编程有帮助的,我都会记录下来。我这里不会一步一步详细解读源码,因为其他博客一大堆,我这里主要讲解一下原理;绑定生命周期,不用我们自己在onStart,onStop去调用,这种思想很好,所以,值得借鉴。主要实现原理是创建一个无UI的Fragment添加(绑定)到当前的Activity(或其他Fragment),通过重写Fragment的onStart和onStop方法,通知RequestManager任务改变原创 2020-12-03 15:42:14 · 274 阅读 · 1 评论 -
Android应用App启动流程
说来惭愧,开发了2-3年的Android,竟还不知道App的启动流程。趁着学习的Binder机制知识,顺便理清当我们点击桌面应用的图标来启动App的过程。概述 当Launcher启动一个App,Launcher会通过IPC通知ActivityManagerService启动App,此时ActivityManagerService会先检测App启动了没。如果目标App没有启动,则通过socket方式原创 2017-07-17 14:44:29 · 1516 阅读 · 0 评论 -
Android消息机制(3)- Handler和Looper
LooperLooper主要的作用是,不断的从MessageQueue中取出Message,交给Message的target(Handler)处理。 打开Looper的源码,发现一段注释的代码: * <pre> * class LooperThread extends Thread { * public Handler mHandler; * public vo原创 2017-07-14 09:42:32 · 425 阅读 · 0 评论 -
Android消息机制(2)- Message和MessageQueue
MessageMessage是一个消息类,信息携带者。// 可以表明是哪个message,类似于idpublic int what;// 两个int属性值,主要是保存一些简单点的值public int arg1;public int arg2;// 发送给接收器的任意对象。当使用Message对象在线程间传递消息时,如果它包含一个Parcelable的结构类(不是由应用程序实现的类),此字段必原创 2017-07-13 17:04:41 · 459 阅读 · 0 评论 -
Android消息机制(1)- 简介
Android为什么要消息机制消息机制,主要是为了解决通信问题。当然,Android的消息机制也是为了解决通信问题–线程间通信问题,常用于UI线程(主线程)和子线程之间通信问题。 UI线程不允许有耗时操作,子线程不能直接更新UI,so有了消息机制,子线程执行完耗时操作之后,通过消息机制,通知UI线程更新UI。 这是我知道的,应该也是消息机制最常用的用途吧。(如有说的不对,请不吝指正,谢谢!)消息原创 2017-07-13 13:33:37 · 537 阅读 · 0 评论 -
Rxjava - 线程调度
很多开发者喜欢使用Rxjava的原因之一应该就是 – 自由的控制线程,而且控制的方式超级简单,利用 subscribeOn() 结合 observeOn()便可切换你想要的线程,超帅的有木有!!调度器所谓调度器,其实实质就是线程,想要程序执行的地方。Rxjava提供了一下几种调度器:// 在当前线程立即开始执行任务Schedulers.immediate( )// 用于IO密集型任务,如异步阻塞I原创 2017-08-03 15:03:07 · 894 阅读 · 0 评论 -
Rxjava - flapMap变换
Rxjava是一个异步框架,类似于AsyncTask,其优点在于让你的异步代码更简洁,阅读代码会更轻松。知己知彼,百战不殆。我们从源码分析Rxjava原理,可以让我们更轻松的使用Rxjava,最主要还能学到Rxjava响应式编程的思想。照例,先来个小例子:Observable<String> originObservable = Observable.just("1", "2", "3");Ob原创 2017-08-02 16:45:39 · 739 阅读 · 0 评论 -
Rxjava - map变换
Rxjava是一个异步框架,类似于AsyncTask,其优点在于让你的异步代码更简洁,阅读代码会更轻松。知己知彼,百战不殆。我们从源码分析Rxjava原理,可以让我们更轻松的使用Rxjava,最主要还能学到Rxjava响应式编程的思想。还是先来一个小例子:Observable<String> observable = Observable.create(new Observable.OnSubsc原创 2017-08-01 17:43:56 · 518 阅读 · 0 评论 -
Rxjava - 基本流程
Rxjava是一个异步框架,类似于AsyncTask,其优点在于让你的异步代码更简洁,阅读代码会更轻松。知己知彼,百战不殆。我们从源码分析Rxjava原理,可以让我们更轻松的使用Rxjava,最主要还能学到Rxjava响应式编程的思想。先看一下简单的例子:// 被观察者Observable<String> observable = Observable.create(new Observable原创 2017-08-01 15:58:25 · 554 阅读 · 0 评论 -
Android 网络编程 - OkHttp源码解析
OkHttp是一个精巧的网络请求库,有以下优点: 支持http2,对一台机器的所有请求共享同一个socket 内置连接池,支持连接复用,减少延迟 支持透明的gzip压缩响应体 通过缓存避免重复的请求 请求失败时自动重试主机的其他ip,自动重定向 而在设计方面也有很多值得学习的地方,如拦截器等。下面通过分析源码,理解OkHttp的设计原理。从OkHttp发起一个请求开始:// 同步OkH原创 2017-07-27 11:56:13 · 503 阅读 · 1 评论 -
Android Retrofit源码解析
按照分析源码流程的“套路”,我们先来个例子:Apipublic interface SearchApi { @GET("/search") Call> search(@Query("key") String key);}使用Retrofit retrofit = new Retrofit.Builder() .bas原创 2018-02-05 10:35:59 · 1501 阅读 · 0 评论 -
Android启动Service流程
其实启动Service和我们上一篇启动App的流程差不多,通过学习老罗的Android系统在新进程中启动自定义服务过程(startService)的原理分析,补充了一些不太清楚的知识点。这里做一下笔记。 老罗的例子,Service是设置了一个android:process属性,表明要在新建的进程运行Service。例子xml代码:<manifest xmlns:android="http://sc原创 2017-07-17 17:56:31 · 839 阅读 · 0 评论 -
Binder机制浅析
关于Binder机制,看了2天还是“糊里糊涂”的,该总结自己理解的Binder了。纯属自己总结,不对的地方,请多多指正。Binder机制有啥用Binder机制主要解决的是IPC(Inner Process Communicate),进程间通信问题。不同进程管理者自己的“东西”(内存),有属性,方法之类的,如果进程A想访问进程B的“东西”,只能通过IPC实现。 IPC的形式有很多种,如共享内存,管道原创 2017-07-15 16:08:04 · 551 阅读 · 0 评论 -
FutureTask源码浅析
在分析AsyncTask源码时,里面用到Future模式,用到了FutureTask这个类,只好“解剖”其源码,学习学习。FutureTask类的作用FutureTask类提供了异步任务的功能,比较独特的是,它在执行任务时,我们可以取消任务,还可以查询这个任务执行的状态和获取其结果,主要是配合线程池使用。很好玩的一个类,不能错过源码解析。FutureTask源码解析先了解几个接口:// Callab原创 2017-07-18 16:21:32 · 461 阅读 · 0 评论 -
Android 缓存 - LruCache
在开发Android过程中,多少会涉及到缓存。例如加载网络图片,不能每次要显示某张网络图片,都要从网络下载,这样的话,不仅浪费用户流量,还可能会造成不好的体验。一般的做法都是先将图片加载到本地保存起来,下次还需要显示同一张图片,直接从内存中获取就行,无需通过网络。这就是缓存了。我们都知道,Android的内存少的可怜,动不动就OOM,所以缓存需要一定的策略,如LRU,LFU,FOFI。LRU(Lea原创 2017-07-25 08:44:36 · 673 阅读 · 0 评论 -
Android View - RemoteViews
设计Android的工程师起名字还是挺规范的,而且一眼就知道是什么意思。RemoteViews,顾名思义,远程的View。Android为了能让进程A显示进程B的View,设计了这么一种View(其实不是真正的View)。其实我们开发过程中,发通知到状态栏显示也是利用了RemoteViews,我们来了解一下RemoteViews吧。我们先看看RemoteViews怎么配合Notification使用原创 2017-07-24 13:47:14 · 3230 阅读 · 0 评论 -
Android View - 滑动
View的滑动主要有3种: (1)调用scrollTo/scrollBy方法: 滑动的是View内容,操作比较简单。 (2)动画: 滑动的View位置,其实改变的是View的translationX或者translationY。(参考我的博文 Android View - 位置参数) (3)改变布局参数: 通过设置LayoutParams,使View改变位置,只要加上延时,不断得改变位置参数,原创 2017-07-22 17:52:52 · 355 阅读 · 0 评论 -
Android View - 事件分发,拦截,处理机制
当我们触碰手机屏幕,便会产生一个触碰事件。由于View体系是以一种树状结构存在的(参考 在我的博文Android View - 控件架构),那么哪个View或者ViewGroup会响应这个事件呢?Android系统提供了一套完善的事件分发,拦截,处理机制,帮助开发者完成准确的事件分发和处理。在《Android群英传》中有这么一个例子,可以帮助我们理解事件分发,拦截,处理机制。假设有一家公司的员工分原创 2017-07-22 14:44:52 · 469 阅读 · 0 评论 -
Android View - 布局Layout
Layout起布局作用,确定View的位置。当ViewGroup确定位置后,会遍历子View并调用其layout方法确定子View的位置。View的onLayout方法View的onLayout方法是一个空实现,因为子View不包含其他View,不需要被调用。ViewGroup的onLayout方法ViewGroup会先调用layout方法:public final void layout(int原创 2017-07-21 17:50:37 · 432 阅读 · 0 评论 -
Android View - 测量Measure
Android在绘制View之前,必须对View进行测量,测量之后,Android才知道要绘制多大的View。View的测量过程,用到MeasureSpec,我们要理解了这个类,才能更好理解View的测量过程。MeasureSpec应用别人的MeasureSpec源码:public class MeasureSpec { // 进位大小为2的30次方(int的大小为32位,所以进原创 2017-07-21 16:48:02 · 400 阅读 · 0 评论 -
Android View - 控件架构
控件分两种:View和ViewGroup。View成为子控件,ViewGroup称为父控件,其实ViewGroup也是继承View实现的。View和ViewGroup有机组合在一起,叫控件树。Like This :每棵控件树都是以ViewParent对象开始,ViewParent是控制控件树的核心,所有View的交互事件都由它调度和分配。上图还有个说明,调用findViewById方法,以深度遍历找原创 2017-07-21 15:02:20 · 634 阅读 · 0 评论 -
Android View - 坐标系
自定义View时,有时需要我们重写View的onTouch,那么肯定要获取手指触碰的坐标,所以我们得好好了解View的坐标系。一般我们都会通过MotionEvent获取坐标,有getX(),getY(),getRawX(),getRawY()。 getX()和getY()获取的坐标是以触碰点所在的View的左上角为坐标原点(View坐标系)的坐标。 getRawX()和getRawY()获取的坐原创 2017-07-21 11:57:19 · 370 阅读 · 0 评论 -
Android View - 位置参数
View的位置参数非常重要,Android系统只有知道View的位置参数,才能确定View所在的位置和大小。View位置参数相关的属性: [left,right,top,bottom,elevation] [translationX,translationY,translationZ] [x,y,z] … 下面对着3组参数进行讲解。left,right,top,bottom通过这张图,应该原创 2017-07-21 11:19:03 · 646 阅读 · 0 评论 -
AsyncTask源码解析
AsyncTask类是Android设计的一个执行异步方法的类,我们可以利用这个类执行一些耗时的任务,然后根据结果更新UI,在执行任务时,也可以更新UI,如设置进度条的进度等等。今天,我们从源码分析这个类,学习执行异步方法的思想,这对我写异步框架应该会起到帮助。Show me the code !!从属性开始,我分为2部分:(1)线程池的初始化。(2)普通属性。(1)线程池的初始化 直接看代码:p原创 2017-07-19 14:57:58 · 317 阅读 · 0 评论 -
Android线程池解析
因为有了线程池的存在,我现在都很少通过new Thread创建线程执行任务,一般都是直接new Runnable直接扔进线程池去执行,除非我对Thread有十足的把握能控制住(执行、中断、销毁)。线程池的好处(1)重用存在的线程,减少对象创建、消亡的开销,性能佳。这个池机制的好处。 (2)可有效控制最大并发线程数,提高系统资源的使用率,同时避免过多资源竞争,避免堵塞。 (3)提供定时执行、定期执原创 2017-07-18 17:47:46 · 372 阅读 · 0 评论 -
Android 缓存 - DiskLruCache
关于DiskLruCache的使用,请参考guolin大神的一篇博文:Android DiskLruCache完全解析,硬盘缓存的最佳方案。这里贴出DiskLruCache的源码和一些注释,希望能帮助大家理解DiskLruCache。/* * Copyright (C) 2011 The Android Open Source Project * * Licensed under the Ap原创 2017-07-25 11:16:01 · 394 阅读 · 0 评论