- 博客(33)
- 资源 (3)
- 收藏
- 关注
原创 Retrofit源码解析
Retrofit 使用1.定义请求接口public interface GitHubService { @GET("users") Call<User> getUser(@Query("id") int userId);}2.构建Retrofit 实例 Retrofit retrofit = new Retrofit.Builder().ba...
2019-07-17 16:37:54
317
原创 OKHTTP源码解析
一、OKHTTP 使用1、GET 请求 OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() .url(url) .build(); Response response = client.newCall(request).execute();...
2019-06-21 15:51:30
715
原创 Volley源码解析二
NetworkDispatcherVolley源码解析一说到如果Request加入网络请求队列的情况有三种Request不需要缓存缓存内容已经过期Ttl 不过期,但是softTtl 已经超出了当前的时间那么4个NetworkDispatcher线程中的其中一个线程就会从阻塞队列取出Request脱离阻塞,代码如下//NetworkDispatcher.javapublic voi...
2019-04-28 15:16:07
332
原创 Volley源码解析一
基本使用//创建请求队列 google推荐写一个单例类 获取唯一一个队列 public class VolleyApplication extends Application { private static RequestQueue requestQueue; @Override public void onCreate() { super.onCre...
2019-04-26 14:46:47
299
原创 LinkedList源码解析
LinkedList底层的数据结构是基于双向循环链表的,既然是双向链表,那么必定存在一种数据结构——我们可以称之为节点,每个节点所对应的类是Entry的实例。Entry中包含成员变量: previous, next,element。其中,previous是该节点的上一个节点,next是该节点的下一个节点,element是该节点所包含的值。基本属性transient int size = 0; ...
2019-03-20 23:11:12
261
原创 ArrayList源码解析
ArrayList 是一个数组队列,相当于 动态数组。与Java中的数组相比,它的容量能动态增。ArrayList中的操作不是线程安全的!基本属性private static final int DEFAULT_CAPACITY = 10; // 初始容量10 private static final Object[] EMPTY_ELEMENTDATA = {}; // 空实例数组...
2019-03-20 22:03:09
374
原创 HashMap源码解析
JDK1.8对HashMap进行了比较大的优化,底层实现由之前的“数组+链表”改为“数组+链表+红黑树”,JDK1.8的HashMap的数据结构如下图所示,当链表节点较少是仍然是以链表存在,当链表节点较多是(大于8)会转为红黑树。先了解下面几点,更好的理解HashMap的源码头节点指的是table表上索引位置的节点,也就是头节点。根节点(root节点)是指红黑树最上面的哪个节点,也就是没...
2019-03-20 15:44:10
508
原创 Android Handler机制
一、关于Handler 的问题1. 为什么在主线程可以直接使用Handler?2. Looper 对象是如何绑定MessageQueue的?3. MessageQueue里的消息从那里来?Handler 是如何往MessageQueue中插入消息?4. Message 是如何绑定Handler 的?5. Handler 如何绑定MessageQueue?6. 关于Handler,在任何...
2019-03-15 16:46:03
176
原创 Android之内存泄露、内存溢出、内存抖动
内存JAVA 是在JVM所虚拟出的内存环境下运行的,内存分为三个区:堆、栈和方法区。栈(stack):是简单的数据结构,程序运行时系统自动分配,使用完毕后自动释放。优点:速度快。堆(heap):用于存放由new 创建的对象和数组。在堆中分配的内存,一方面由java虚拟机自动垃圾回收器来管理,另一方面还需要程序员提高修养,防止内存泄漏问题。方法区(method):又叫静态区,跟堆一样,被所...
2019-02-27 23:21:55
1029
原创 Android进程间的通信
由于Android系统中应用程序之间不能共享内存。在不同应用程序之间交互数据(跨进程通讯),Android SDK提供了4种跨进程通讯的方式。这4种方式正好对应Android系统中4种应用程序组件:Activity、ContentProvider、Broadcast 和 Service。1. Activity 可以跨进程调用其它应用程序的Activity;2. ContentProvider ...
2019-02-25 22:28:49
189
原创 Android极光推送 jcenter 自动集成
极光推送提供了一种jcenter自动集成的方式,相对于之前的手动集成方式,这种方法真的是简单快捷,可以省去很多操作,让你分分钟搞定极光推送,再也不用为以前那种大规模复制粘贴而烦恼了。1.配置jcenter支持在Project 根目录的主 gradle 中配置了jcenter支持(新建project默认配置就支持)build.gradlebuildscript { repositor...
2019-01-01 17:55:26
582
1
原创 Android四大组件之ContentProvider
ContentProvider作为四大组件之一,主要作用是进程间进行数据交互和共享(跨进程通信)ContentProvider相当于中间者角色(搬运工),真正 存储和操作数据的数据源还是原来存储数据的方式(数据库、文件、xml或网络)数据源可以是数据库、文件、xml、网络等使用ContentProvider需要知道以下内容一、URI(统一资源标识符)(1)、唯一标识ContentPr...
2018-12-07 17:41:24
366
原创 Android四大组件之BroadcastReceiver
普通广播(Normal broadcasts)是完全异步的,可以在同一时刻(逻辑上)被所有接收者接收到,消息传播的效率比较高;缺点是接收者不能将处理结果传递给下一个接收者,并且无法终止广播Intent的传播;//发送普通广播,所有订阅者都有机会获得并进行处理Context.sendBroadcast()有序广播(Oedered broadcasts)按照接收者的优先级别(声明在int...
2018-12-04 10:41:18
234
原创 Android四大组件之Service
第一种方式:通过start方式开启服务使用service的步骤:定义一个类继承Service;manifest.xml文件中配置Service;使用context.startService(Intent)启动Service;不使用时,调用context.stopService(Intent)停止服务;使用start方式启动的生命周期:onCreate() -&amp;amp;gt; onSt...
2018-12-03 17:17:33
354
原创 Android四大组件之Activity
一、Activity 生命周期这里用Activity1、Activity2来举例说明生命周期的流程启动Activity1:系统调用onCreate(),然后调用onStart(),在调用onResume(),activity进入运行状态。Activity1被其它Activity覆盖其上 (DialogActivity) 或者锁屏:系统会调用onPause(),暂停当前Activity的运...
2018-12-02 00:08:02
305
原创 View测量、布局和绘制
View三大流程的发起点当Activity对象被创建完毕后,会将DecorView添加到Window中(Window是对窗口的抽象,DecorView是一个窗口的顶级容器View,其本质是一个FrameLayout,同时会创建ViewRootImpl(ViewRoot的实现类)对象,并将ViewRootImpl与DecorView建立关联。View的绘制流程从ViewRoot的performTr...
2018-11-29 17:28:55
348
原创 View事件分发
Android中,虽然View不属于四大组件,但它的作用可以堪比四大组件,不管是一个普通的视图,还是一个复杂的布局,都是依靠View来实现的。与事件分发有关的方法一个完整的手势包括4个操作事件作用ACTION_DOWN手指按下ACTION_MOVE手指滑动ACTION_UP手指抬起ACTION_CANCEL事件被拦截一次触摸屏幕的过程为DO...
2018-11-26 23:01:50
211
原创 DataBinding使用(三):DataBinding高级使用
一、动态变量有时候我们可能不知道Binding类的名称,比如RecyclerView.Adapter中item布局可能有很多,并不会对应特定的Binding类,但任然需要通过onBindViewHolder(VH, int )去绑定数据public void onBindViewHolder(BindingHolder holder, int position) { final T it...
2018-11-19 17:15:53
727
原创 DataBinding使用(二):可观察的数据对象
DataBinding中可观察的对象的作用是当数据发生变化是通知其它对象,和观察者模式差不多。Databinding 提供了三种通知方式来通过JavaBean更新UI,分别是Observable对象,ObservableFilelds字段和Observable Cllections集合,这些数据对象绑定到UI,当数据对象的属性发生变化时,UI也自动更新。一、JavaBean 继承BaseObse...
2018-11-18 23:04:21
437
原创 DataBinding使用(一):布局和binding表达式
DataBinding通过数据绑定,可以直接在xml中绑定数据并实现一些处理逻辑,实时动态刷新数据。可以减少代码量,没有反射性能也很好。一、环境配置在Module级别的build.gradle上添加对DataBinding的支持android { .... dataBinding { enabled = true }}如果在library中使用...
2018-11-17 19:44:19
2538
原创 Android ConstraintLayout 布局
AndroidStudio 3.0 默认ConstraintLayout,可以减少布局层级并提高布局性能;能够灵活的定位和调整子View的大小,子View依靠约束关系来确定位置。一、基本属性属性作用layout_constraintLeft_toLeftOf左边左对齐layout_constraintLeft_toRightOf左边右对齐layout_con...
2018-11-05 21:45:16
289
原创 Kotlin Android个人总结
Android项目中使用了一段时间的Kotlin,给我的体验还是不错的,上手比较容易,和Java完全兼容,相互调用也比较方便,代码量减少了一部分特此做一个小小的总结:万能的 :作用示例定义变量类型var hello:String = &amp;amp;amp;amp;amp;amp;quot;Hello Kotlin&amp;amp;amp;amp;amp;amp;quot;定义参数类型fun set
2018-11-04 20:49:18
598
原创 Android 中 MVC 、MVP 、MVVM 模式
软件的架构方式很多,从MVC,到MVP,再到MVVM,在不断演化的过程中核心的思想就是模块内部的高聚合和模块之间的低耦合。从而提高程序的开发效率,并且更容易进行后续的测试以及定位问题。一、MVC模式(Model, View, Controller) 模型层(Model) 负责处理数据的加载或者存储,封装与应用程序的业务逻辑相关的数据以及对数据的处理。 视图层(View) 负责数据的...
2018-09-11 16:34:15
330
原创 ES6总结
零零碎碎的学习ES6,总想对ES6有个小小的总结,用了几天的空余时间和参考大佬们的文章后终于有了个小小的总结,当然这只是ES6中比较常用的部分内容。有些事现在不做以后就不可能会做了,好了,开始学习ES6一、let 命令二、const 命令三、字符串模板四、变量的解构赋值五、扩展运算符和rest运算符六、数组的知识七、箭头函数八、Set九、Ma...
2018-07-20 17:45:28
745
原创 小程序总结
一、小程序的主体部分由app.js、app.json、app.wxss三个文件组成,放在根目录(1)app.js 可以监听并处理小程序的生命周期、声明全局变量。其余的.js文 件可以通过var app = getApp() 获取其实例,调用其中定义的方法和变量,但不可以调用生命周期的方法。 (2)app.json 是小程序的全局配置。 pages...
2018-06-13 21:17:23
1202
1
原创 小程序下拉刷新、上拉加载
下拉刷新、上拉加载是使用比价多的一个功能,微信小程序有两种方式实现:一、onPullDownRefresh 和 onReachBottom 方法实现1、首先要在.json文件中设置属性 &amp;amp;quot;enablePullDownRefresh&amp;amp;quot;: true可以在app.json的window中设置全局属性,也可以在需要的页面.json中设置单个页面2、页面上拉、下拉的处理函数
2018-06-11 13:55:27
2752
原创 小程序列表条目点击
每个项目列表是必不可少的,有了列表就要点击列表条目左一些操作,我这里是点击条目获取到位置传给上一页(add页)并显示1 .wxml代码&amp;amp;amp;lt;view class='address'&amp;amp;amp;gt;&amp;amp;amp;lt;view wx:for=&amp;amp;quot;{{addressArr}}&amp;amp;quot; wx:ke
2018-06-04 22:18:07
5682
原创 小程序使用高德地图获取地理位置
基于Bmob后台云写一个小程序 — 3 小程序官方文档只提供我们获取到经纬度,并没有获取到相关地理位置的信息,因此需要用到第三方的api来获取 我这里用高德地图api来获取地理位置的信息1、注册高德地图开发者 2、创建应用、获取Key 3、下载小程序SDK放到小程序项目中 4、设置安全通讯域名 登录微信公众平台,“设置“–&amp;amp;gt;”开发设置”设置request合法域名,将h...
2018-06-04 19:28:58
16205
2
原创 小程序中Flex布局
Flex布局相对float布局简单、方便。可以减少wxss的代码,同时符合小程序开发文档要求。Flex是Flexible Box的缩写,意为“弹性布局“,使用Flex布局的元素,称为Flex容器(Flex container),简称”容器”。它的所有子元素自动成为容器成员,称为Flex项目(flex item),简称”项目”。 一、容器的属性 容器属性 属性值 ...
2018-06-01 23:56:55
3248
原创 小程序集成Bmob作为数据存储
基于Bmob后台云写一个小程序 小程序集成Bmob需要用到: 1、 Bmob账号 Bmob后端云官网 2、 微信小程序账号 微信公众平台官网 一、Bmob端1、登录Bmob,创建一个应用 2、登录微信公众平台( 复制 小程序ID 和 小程序密钥 )3、点击进入Bmob创建的应用,设置–应用配置 授权并填写 小程序ID 和 小程序密钥 4...
2018-05-30 15:24:43
3507
2
原创 基于Bmob后台云写一个小程序
学习一段时间小程序后,想简单的写一个小程序,由于没有服务器,所以选择了Bmob后台云;打算分成几次记录下实现这个小程序所用到的知识点:主要如下:1、小程序集成Bmob作为数据存储 2、小程序Flex布局 3、小程序使用高德地图获取当前位置 4、小程序条目选择 5、小程序页面跳转 6、小程序下拉刷新、上拉加载 7、小程序缓存实现效果图前期准备1、Bmob账号 ...
2018-05-29 23:32:57
3286
1
原创 小程序的生命周期和页面的生命周期
在小程序中,通过App()来注册一个小程序,通过Page()来注册一个页面1. 小程序的生命周期 App.jsApp({ onLaunch: function () { console.log('App onLaunch'); }, onShow:function (){ console.log('App onShow'); }, ...
2018-05-29 18:07:40
12361
1
原创 Kotlin中使用BottomNavigationView实现底部导航
Aandroid Design Support Library中增加了BottonNavigationView控件,实现底部导航切换页面方便了许多,同时它也有不便之处: 1. 底部的条目数超过三个,点击每个条目是会有很大的偏移量 2. 无法添加小红点提示以前为了实现底部导航切换页面,我通常用以下两种方式 1. TabLayout+ViewPager+Fragment 方式实现 2...
2018-05-14 16:09:35
5964
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人