Android开发知识
Android开发的一些知识,平时自己学习Android技术的一些总结和笔记
晨雨细曲cyxq
公众号:晨雨细曲。努力学习,乐于分享,让分享成为一种习惯
展开
-
EventBus源码解析
前言EventBus是Square公司公司开源的一款通讯组件。他最大的功能就是可以在Activity与Activity、Activity与Fragment中进行消息的通讯传输。而且他的使用比广播要容易,也更轻便,广受好评。使用方式在gradle中添加引用implementation 'org.greenrobot:eventbus:3.0.0'之后在Activity的生命周期onCreate()中添加注册,在onDestroy()中进行注销操作,然后再写一个订阅方法用来接收消息和处理消息即可。原创 2020-05-26 15:22:57 · 344 阅读 · 0 评论 -
结合源码谈一谈OkHttp解析
前言Okhhtp是square公司出品的一款非常优秀的网络框架。可以说,目前市面上大部分Android开发人员在网络请求事,都在使用这款优秀的框架。下面,我就结合源码来分析下这款网络框架内部的执行原理,做到知其然也之气所以然的目的。使用OkHttp的使用非常的简单,我下面写一个大概的使用方法提供给大家查看。 //创建okhttpclient对象 OkHttpClient okHttpClient = new OkHttpClient.Builder(.原创 2020-05-25 10:14:04 · 505 阅读 · 1 评论 -
谈一谈Android 启动优化的一些理解和方案
前言假如我们去到一家餐厅,叫了半天都没有人过来点菜,那等不了多久就没耐心想走了。对于 App 也是一样的,如果我们打开一个应用半天都打不开,那很快的我们也会失去耐心。启动速度是用户对我们应用的第一体验,用户只有启动我们的应用才能使用我们应用中的功能。就算我们应用内部设计得再精美,其他性能优化地再好,如果打开速度很慢的话,用户对我们应用的第一印象还是很差。你可以追求完美,要...原创 2020-05-07 16:30:45 · 1070 阅读 · 0 评论 -
RxJava使用(一)基础使用
RxJava是什么?如果非要用一句话来概括的话,那就是RxJava是一个异步操作。RxJava是一个和handler以及AscyTask一样的可以控制线程操作线程的一个异步操作。 既然RxJava和Handler以及AscyTask效果一样,那为什么要使用RxJava而不是干脆直接使用Handler或者AscyTask呐?这个原因有两点。第一,RxJava的操作简洁。这里需...原创 2018-04-07 14:38:22 · 277 阅读 · 0 评论 -
RxJava使用(二)线程之间的切换
在开发当中只要不是静态页面,我们都要对后台服务器发起网络请求。总所周知,发起网络请求是一个耗时操作,一般的耗时操作都必须开启一个子线程来进行请求,从网络端拿到数据之后我们要将数据set到各种UI控件中去。但是坑爹的是,在子线程之中我们并不能更新UI,必须在主线程(又称UI线程)进行数据的set,因此我们又必须切换到主线程去做处理。这样一会儿子线程,一会儿主线程的切换处理,非常让人头疼,代码往往...原创 2018-04-07 15:35:19 · 3127 阅读 · 0 评论 -
EventBus(一)基础使用
EventBus是什么? EventBus是一个类似于Broadcast,可以在不同组件和不同线程之间进行通信传递数据的一个组件。 为什么要使用EventBus而不是使用Broadcast? EventBus相比较Broadcast线程开销要小的多,并且操作简便快捷。 EventBus具体使用场景 1. ...原创 2018-04-21 17:43:34 · 351 阅读 · 0 评论 -
Service详解
简介:Service为Android的四大组件之一。他与Activity有些类似,都是可以在他们的内部进行一些代码程序的执行操作。但是区别在于,Activity是具有界面,可以有UI界面与用户进行交互,但是Service却是运行在后台的操作,他不具备UI界面,总是静静的在后台运行着。所以,如果某个程序需要呈现某个界面就用Activity,如果不需要进行界面的交互,则用Service。 ...原创 2018-05-05 18:12:01 · 1564 阅读 · 0 评论 -
IntentService详解
简介Service执行任务的时候,并不是在子线程中执行,而是在主线程中执行,所以我们在Service中不能执行一些耗时操作,避免造成ANR现象。如果非要进行网络请求等耗时操作的话,这里可以使用两种方式进行处理。1.在Service中开启一个子线程,在子线程中进行耗时操作。但是这里需要声明一个事情,可能有人会问,为什么不能在别的组件中开启子线程进行耗时操作?由于Activity可能会被用...原创 2018-05-05 18:14:12 · 1527 阅读 · 0 评论 -
从源码的角度来谈谈面试常客Handler的内部原理
前言我们都知道,在进行Android应用开发的时候,主线程(又称为UI线程)不能进行网络请求一类的耗时操作,必须开启一个子线程来处理;但是在子线程里面又不能进行更新UI的操作,更新UI必须在主线程里操作。那么当子线程进行完耗时操作时如何通知主线程更新UI呐?这个时候Handler就孕育而生了。Handler被称之为Android内部消息机制,他的作用是在子线程进行完耗时操作的时...原创 2018-05-20 19:23:13 · 1389 阅读 · 0 评论 -
RxJava使用(三)操作符
Map操作符Map操作符,是将获取到的数据类型进行转换的一个操作符。他可以将具体从网络端或者其他地方获取到的数据,通过自己编写的方法进行转化成任何你需要的数据类型并返回,交给相应的方法去处理。 Observable.create(new ObservableOnSubscribe<String>() { @Override publ...原创 2018-05-27 17:17:48 · 212 阅读 · 0 评论 -
从源码角度谈谈AsyncTask的使用及其原理
从事Android开发的都知道,我们在进行耗时操作的时候是不能在主线程进行的,不然会报ANR异常,因此我们必须开启一个子线程,在线程中处理耗时操作。但是在子线程中我们拿到了耗时操作返回的数据之后需要在UI上展示,但是在子线程又不能对UI进行更新,于是乎在Android内部就有了消息通信机制Handler以及AsyncTask。今天我们来讲讲AsyncTask的使用以及配合他的源码来讲讲他的内部原理...原创 2018-08-15 14:11:00 · 1508 阅读 · 1 评论 -
从源码的角度来谈一谈HashMap的内部实现原理
HashMap可以说是我们一个熟悉又陌生的Java中常用的存储数据的API。说他熟悉,是因为我们经常使用他,而说他陌生是因为我们大部分时间是只知道他的使用,而并不知道他内部的原理,但是在面试考察的时候又最喜欢去问这个原理。今天,我就来从源码的角度,谈谈对HashMap的理解。HashMap概述HashMap的底层基于一个数组来进行数据的存储和取出。其继承于Map这个接口来实现,通过put和...原创 2018-08-19 14:06:59 · 934 阅读 · 0 评论 -
谈谈LruCache算法的底层实现原理及其内部源码
前言我们在对数据进行操作的时候,为了避免流量或者性能的消耗,我们对于一些数据都会进行缓存处理,而对数据的缓存的要点不仅仅只有我们所熟悉的存储缓存和使用缓存,还有删除缓存。对于添加和获取缓存很好理解,那么为什么还要对缓存进行删除呐?原因很简单,因为我们的手机容量是有限的,如果我们拼命的写入缓存,那么终有一天内存会满导致程序奔溃,这显然不是我们想要的结果,于是我们在写入缓存的时候并非无脑写入,而是...原创 2018-08-20 11:16:38 · 11284 阅读 · 4 评论 -
EventBus(二)从源码角度来谈谈设计原理
前言EventBus是我们常用的第三方框架,主要作用是在各个组件之间进行通信。而且使用起来非常简单,内部原理也并不复杂,如果还不会用的人,可以参考我的这边文章EventBus(一)基础使用。这里对于使用不做说明,我们主要是来看看内部实现方式和原理。 源码解析 eventBus.getDefault()/** Convenience singleton for apps u...原创 2018-08-21 17:56:00 · 391 阅读 · 0 评论 -
OkHttp3.0解析(一) —— 从源码的角度谈谈发起网络请求时做的操作
OkHttp是square公司出品的一款网络加载框架,我们今天从源码的角度来看看,他在我们进行同步和异步请求的时候,内部都具体做了什么操作。使用在使用OkHttp的时候,首先第一步是实例化一个OkHttpClient对象。OkHttpClient okHttpClient = new OkHttpClient();我们来看看他的构造方法。public OkHttpClien...原创 2018-08-22 14:26:26 · 356 阅读 · 0 评论 -
OkHttp3.0解析(二)——谈谈内部的缓存策略
前言合理的利用本地的缓存策略,可以有效的减少网络请求时候的网络开销,减少响应的延迟。而在OkHttp3.0中的缓存主要作用在缓存拦截器CacheInterceptor里面。所以现在我们就具体分析下CacheInterceptor中对缓存的具体操作。 CacheInterceptor我们都知道,OkHttp的核心或者说精华部分就是其强大的拦截器功能,几乎你在使用他的时候都是一些拦截器...原创 2018-09-05 18:04:37 · 315 阅读 · 0 评论 -
谈一谈Android中的事件分发
Android中的事件分发对很多人来说并不陌生,它可以说是Android的重点难点,也是面试经常会问的基础知识,很多人都搞不太清楚事件分发的过程。今天我们就来谈一谈Android中事件分发的过程原理。 事件什么叫做一个事件?手指按下到抬起的一个过程称之为事件。在Android中把事件定义为,手指按下(DOWN),到手指抬起(UP),中间由零个、一个或者无数个移动(MOVE)连接起来称之...原创 2018-09-07 11:12:13 · 1627 阅读 · 0 评论 -
Java中的线程详解
前言我们都知道由于主线程是一个线程不安全的线程,如果在里面进行耗时操作很容易造成主线程的阻塞,导致事件停止分发(包括绘制事件)。,所以在里面不能进行耗时操作。因此当我们要进行一些耗时操作,我们必须开启一个线程来执行任务。那么开启线程的方式有几种?县城阻塞的方式有哪几类以及线程池的操作方式是怎么样的。下面来一一说明。创建线程的方式在Java中我们创建线程的方式总共有三种。 一、继...原创 2018-09-16 15:14:39 · 216 阅读 · 0 评论 -
Android常用库和插件避免重复造轮子(持续更新)
前言整理了一份Android开发中常用的第三方库,我们在开发的时候就不用去自己再写一些功能了,避免重复造轮子带来的浪费。本文只是部分,我未来将持续更新,希望大家喜欢。下拉刷新PullLoadMoreRecyclerView实现RecyclerView下拉刷新和上拉加载更多以及RecyclerView线性、网格、瀑布流效果演示 https://github.com/WuXiao...原创 2018-09-28 14:07:04 · 1532 阅读 · 0 评论 -
OkHttp3.0解析(三)——谈谈内部任务分发器dispatcher
前言OkHttp之所以能够高效处理任务的一个很重要原因在于其内部维护了三个任务队列(readyAsyncCalls、runningAsyncCalls、runningSyncCalls)和一个线程池(ThreadPoolExecutor)。这四个东西由内部的任务分发器dispathcer来进行调控处理,从而达到高效处理多任务的效果。线程池的作用不言而喻,他的主要作用在于可以避免我们在使用线...原创 2018-09-30 17:29:19 · 879 阅读 · 0 评论