自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(52)
  • 资源 (1)
  • 收藏
  • 关注

原创 进阶:协程原理

目录一、协程实现线程切换二.CPS三、状态机一、协程实现线程切换切换到指定的线程是一个很容易实现的功能,难点不是这个,了解即可https://zhuanlan.zhihu.com/p/386757845向CoroutineContext添加Dispatcher,指定运行的协程 在启动时将suspend block创建成Continuation,并调用intercepted生成DispatchedContinuation DispatchedContinuation就是对原

2021-12-12 17:21:32 1206 1

原创 一文带你全面了解Flow

目录一、Flow介绍二、简单使用三、原理四、两种热流SateFlow & SharedFlow五、Flow与LiveData六、Flow与Channel七、总结一、Flow介绍引入Flow的目的:Flow解决了什么问题。LiveData不支持线程切换,所有数据转换都将在主线程上完成,有时需要频繁更改线程,面对复杂数据流时处理起来比较麻烦。 而RxJava又有些过于麻烦了,有许多让人傻傻分不清的操作符,入门门槛较高,同时需要自己处理生命周期,在生命周.

2021-12-12 16:50:49 4523

原创 Compose Modifier

一、Modifier简单使用我们先拿XML中的FrameLayout做下对比,如下,我们在xml文件中定义了一个宽度填充满父容器,高度200dp,背景为黑色,内容边距为16dp的FrameLayout: <FrameLayout android:layout_width="match_parent" android:layout_height="200dp" android:background="#000000" a..

2021-11-21 17:12:50 669

原创 Compose系列:Recomposition重组作用域

Compose是声明式UI,但并不是因为其是声明式UI,所以就实现了响应式var content = "wyz"@Composablefun contentText() { Text(content)//这里当content发生改变时,Text不会发生重新刷新}Compose的响应来自State这个工具的配合val content by mutableStateOf("wang")@Composablefun ReFresh() { Text(content...

2021-11-21 16:07:53 3298 1

原创 Compose概述

文章目录系列文章目录 前言 一、pandas是什么? 二、使用步骤 1.引入库 2.读入数据 总结一、Compose概述示例:paJetpack Compose 是Google发布的一个Android原生现代UI工具包,它完全采用Kotlin编写,是一套声明式UI框架,可以使用Kotlin语言的全部特性,可以帮助你轻松、快速的构建高质量的Android应用程序。包括一下几个方面:加速开发如果你是一个初级开发工程师,你总是希望有更多的时间来写业...

2021-11-21 15:49:23 4411

原创 Android Framework层学习——为什么SystemServer进程与Zygote进程通讯采用Socket而不是Binder

目录一.Activity的启动流程二.提出问题三.提出假设 假设1.是不是在这种应用场景下,Socket使用的性能比Binder更佳?假设2.是不是由于某种限制,在这个场景下不适合使用Binder?假设2.1:会不会是由于先后顺序问题,Zygote中无法使用Binder?假设2.2是不是在这个流程中fork函数出于某些原因不能使用Binder?...

2019-03-07 23:51:59 11924 11

原创 android开发框架总结 (二)MVP与MVVM详细介绍与对比,选择适合的框架

前言本篇文章将非常“细致”地总结分析MVP与MVVM这两种框架对于架构的选择做了比较多的分析,应该是干货满满,如果你对这两者的使用与选择上还有迷惑之处。真的希望你能认真看完。如果你是非常有经验的程序猿,那就当相互学习总结,如果有不同看法还望指教。当然,我也是非常想进步的。目录前言1.MVPMVP的优点MVP的缺点2.MVVMMVVM的特点(优点)MVV...

2018-12-02 20:31:28 3426 1

原创 OkHttp源码彻底解析(三)OkHttp3.0拦截器原理——责任链模式

本系列文章:OkHttp源码彻底解析(一)OkHttp请求流程OkHttp源码彻底解析(二)OkHttp架构及API源码OkHttp源码彻底解析(三)OkHttp3.0拦截器原理——责任链模式OkHttp源码彻底解析(四)OkHttp拦截器的作用OkHttp源码彻底解析(五)OkHttp连接池目录什么是拦截器拦截器中的类拦截器中的源码拦截器源码的逻辑流...

2018-11-24 11:56:25 2849 1

原创 android开发框架总结 (一)从java基本原则细数MVP的“七宗罪”

前言我们都知道,MVP是在MVC的基础上做了一次升级,相比MVC,MVP中P层与V层隔离,V层只负责UI,业务逻辑由抽象出来的P层负责,真正意义上的隔离View的细节和复杂性的模式.......好了好了,上面是网上MVP“鼓吹”的基本套路。“欲想让其灭亡,必先使其膨胀”今天,反其道而行之,我们来罗列MVP的“七宗罪” MVP的“七宗罪”有一定经验的工程师都知道,我们的jav...

2018-11-21 23:08:15 604

原创 Android内存泄漏的检测工具——LeakCanary

  首先了解什么是内存泄露http://liuwangshu.cn/application/performance/ram-3-memory-leak.html 1Leakcancary的优势LeakCanary是一个可视化的内存泄露分析工具,他具备以下优势· 简单:只需设置一段代码即可,打开应用运行一下就能够发现内存泄露。而MAT分析需要Heap Dump,获取文件,...

2018-03-15 09:41:34 12618 1

原创 Surface

一、Surface在Andorid的窗口实现里,每一个Window其实都会对应一个Surface,而每个Activity都会持有一个Window,所以,我们通常在Activity里设置的view(通过setContentView),从java抽象上看其最终的绘制目标就是在Surface上。通常我们并不手动去创建Surface,帮我们创建Surface的是WindowManagerService,它在帮我们创建Surface时,会生成一个SurfaceSession,然后将这个Surfac..

2021-12-12 17:47:13 1502

原创 ViewModel原理

一、ViewModel的优势1.避免横竖屏销毁时手动存数据,而且由于不是序列化,所以任何数据都可以存储2.Act Frag 主要处理显示的逻辑,VM可以把数据操作的逻辑处理,实现数据与视图控制的逻辑分离3.避免由于耗时操作(获取网络数据),导致内存泄漏,VM可以避免内存泄漏由于耗时操作都不在Activity中处理,且VM没有持有Activity,所以Act可以正常退出,观察当前 activity 生命周期,当 Lifecycle.Event == Lifecycle.Event.ON..

2021-12-12 17:33:55 1799

原创 RecyclerView对比ListView缓存原理

目录一、ListView缓存原理二、RecyclerView缓存三、总结一、ListView缓存原理RecyclerView比ListView多了一个LayoutManager(测量和布局的职责)RV实际的onLayout和onMeasure里的作用都交给LayoutManager来执行,通过LM来执行相对应的逻辑,这样就提供给应用层可配置的空间。ListView中一个View对应一个ViewHolderListView两级缓存,缓存对象是ViewRecy

2021-12-12 17:09:33 1116

原创 Android系统架构及生态链

目录一、Android系统架构二、Android生态链一、Android系统架构最底层是 Linux Kernel 层。Android OS 的基石是 Linux Kernel Android Framework:中间两层由下到上是 Native Framework 层和 Java Framework 层。这两个是 Android 独有的 (Android OS)。 应用层:最上层是应用层。正是基于 Android Framework分为四层:1.应用层2.应用

2021-12-12 17:05:34 3031

原创 Compose概述

一、Compose概述Jetpack Compose 是Google发布的一个Android原生现代UI工具包,它完全采用Kotlin编写,是一套声明式UI框架,可以使用Kotlin语言的全部特性,可以帮助你轻松、快速的构建高质量的Android应用程序。包括一下几个方面:加速开发如果你是一个初级开发工程师,你总是希望有更多的时间来写业务逻辑,而不是花时间在一些如:动画、颜色变化等事情上,而Jetpack Compose 为我们提供了很多开箱即用的Material 组件,如果的APP是..

2021-11-21 16:26:33 1698

原创 OkHttp源码彻底解析(六)从OkHttp看HTTP

前言:网页端好像会有协商缓存,会用到304这个code来判断是否需要更新数据,如果返回304那前端直接用本地缓存内容,不需要更新数据。在移动端,OkHttp帮我们做好了,不过要设置Cache 的位置,这东西需要前后端同时支持才行。后端不需要走到业务层面去判断是否是304,而是像我们的okhttp那样,在业务的前面有一层东西直接用安卓的请求信息判断最近的一次更新时间,判断下静态资源是否有更新过,没更新就直接帮后端小哥返回304(如果数据没更新的话)了简单的Socket

2021-09-20 22:50:56 534

原创 Android网络优化——应用层策略

网络性能指标:1.建立连接的速度 2.传输速度 3.到达率(TCP/IP底层已经有错误重传机制,但是并不是专门为移动端设计的)4.长连接的存活率优化切入口:1.DNS优化(一般是优化的首选),使用HTTPDNS替代LocalDNSDNS是指根据域名查出IP地址,是HTTP协议的前提,所以网络优化的第一步就是DNS优化。DNS优化主要体现在两点:1.安全性:减少或避免由...

2019-04-09 20:28:28 704 1

原创 阿里巴巴android开发标准

随着公司的业务发展,项目越来越多,越来越大,复杂性也越来越高。查找一个BUG变得越发抓狂;新人熟悉一块代码也变得越发困难。有的时候顺手写下的一行充满坏味道的代码,可能当时不会出现什么影响,而且当事人也十分清楚自己写的东西。但是,当日积月累之后,这种坏代码越来越多,整个项目就变得混乱不堪,牵一发而动全身,各种错误,修复了这影响了那。这是个老生长谈的话题,要解决前面说的这些情况,必须要有一个规范来...

2018-12-03 21:48:04 420

原创 OkHttp源码彻底解析(二)OkHttp架构及API源码

前言OkHttp是一个处理网络请求的开源项目,是安卓端最火热的轻量级框架,由移动支付Square公司贡献(该公司还贡献了Picasso)用于替代HttpUrlConnection和ApacheHttpClient(android API23 6.0里已移除HttpClient,现在已经打不出来),这是现在非常主流的一个网络请求框架了。可能有人会说Retrofi...

2018-12-01 19:59:05 1444 1

原创 OOP与AOP的理解

    本人是搞android开发的,平时对OOP运用比较多,对其思想也自然比较熟悉。相比之下大多数android开发者对AOP的比较默认,所以这里来总结一下两者的区别1.概念OOP是面向对象编程,核心思想是将客观存在的不同事物抽象成相互独立的类,然后把与事物相关的属性和行为封装到类里,并通过继承和多态来定义类彼此间的关系,最后通过操作类的实例来完成实际业务逻辑的功能求。AOP是面向切...

2018-11-26 09:31:36 1036

原创 OkHttp源码彻底解析(一)OkHttp请求流程

前言OkHttp是一个处理网络请求的开源项目,是安卓端最火热的轻量级框架,由移动支付Square公司贡献(该公司还贡献了Picasso)用于替代HttpUrlConnection和ApacheHttpClient(android API23 6.0里已移除HttpClient,现在已经打不出来),这是现在非常主流的一个网络请求框架了。可能有人会说Retrofit+RxJava才是最主...

2018-11-26 00:00:42 1885 1

原创 OkHttp源码彻底解析(五)OkHttp连接池

本系列文章:OkHttp源码彻底解析(一)OkHttp请求流程OkHttp源码彻底解析(二)OkHttp架构及API源码OkHttp源码彻底解析(三)OkHttp3.0拦截器原理——责任链模式OkHttp源码彻底解析(四)OkHttp拦截器的作用OkHttp源码彻底解析(五)OkHttp连接池目录OkHttp连接池连接池的意义——KeepAl...

2018-11-25 16:13:15 2660

原创 OkHttp源码彻底解析(四)OkHttp拦截器的作用

   本系列文章:OkHttp源码彻底解析(一)OkHttp请求流程OkHttp源码彻底解析(二)OkHttp架构及API源码OkHttp源码彻底解析(三)OkHttp3.0拦截器原理——责任链模式OkHttp源码彻底解析(四)OkHttp拦截器的作用OkHttp源码彻底解析(五)OkHttp连接池目录  拦截器 OkHttp中的拦截器 失败...

2018-11-25 09:47:30 3468

原创 RxJava 2.x 教程及源码揭秘(四)由设计模式,揭秘Rxjava流程原理

前言     那么本文就将对Rxjava做一次详细的探索,相信跟随着博主的思路带着自己的思考,你一定也能掌握使用这个热门技术的要领。不仅如此,我们更要深入了解其内部原理,做到知其然,并且知其所以然。    关于Rxjava的基本了解以及其使用,我在该系列的另一篇文章中已经介绍过了。详情关注    RxJava 2.x 教程及源码揭秘(一)入门理解及应用   在另一篇文章中,从源码出...

2018-11-18 12:05:20 2934

原创 RxJava 2.x 教程及源码揭秘(三)Rxjava核心源码解析

 RxJava中最强大最核心的部分莫过于它的线程调度 和 花式操作符。可以说掌握了这部分基本就掌握了RxJava的实现过程 本文将探究:知道线程调度是怎么实现的 知道操作符是怎么实现的 map操作符map是一个高频的操作符,我们首先拿他开刀。例子如下,源头Observable发送的是String类型的数字,利用map转换成int型,最终在终点Observer接受到的也...

2018-11-18 11:38:50 634

原创 RxJava 2.x 教程及源码揭秘(二)RxJava+Retrofit及其他Retrofit应用场景

 RxJava 2.x 教程及源码揭秘(一)入门理解及应用RxJava 2.x 教程及源码揭秘(三)Rxjava操作符源码解析RxJava 2.x 教程及源码揭秘(四)由设计模式,揭秘Rxjava流程原理RxJava 的适用场景和使用方式1. 与 Retrofit 的结合Retrofit 是 Square 的一个著名的网络请求库。没有用过 Retrofit 的可以选择跳过这一...

2018-11-18 11:03:09 2697

原创 RxJava 2.x 教程及源码揭秘(一)入门理解及基本操作符

目录前言Rxjava的介绍Rxjava的优势Rxjava是观察者模式Rxjava是装饰者模式ObservableRxjava的操作符subScribeOn与observeOn切换线程其他操作符补充前言     本人从一年多前开始使用rxjava,可以说是见证了这个工具越来越流行,目前许多公司的android项目也都运用这个工具。Rxjava有着其独特...

2018-11-17 12:25:19 626

原创 Java 依赖注入的思考

什么是依赖注入 这里展开一下,控制反转,依赖注入,是说把控制的主动权转移了,不由调用者决定要调谁来实现,而是由被注入决定谁去实现 依赖注入到底有啥好处呢? 我使用过一些 依赖注入框架——但是他们的实现在我看来,就是在使用类似反射的机制!!不让对象 new 出来,就降低了依赖!——难道,我写一个简单的 反射类,我就相当于写出了一个 依赖注入框架吗???一个反射类可...

2018-11-15 11:40:54 189

原创 onClick onTouch onTouchEvent调用顺序

通过源码查看: View – dispatchTouchEvent方法中  可以看出: onTouchListener的接口的优先级是要高于onTouchEvent的,假若onTouchListener中的onTouch方法返回true, 表示此次事件已经被消费了,那onTouchEvent是接收不到消息的。 那么思考: 如果给一个Button设置一个onTouchListener并且...

2018-10-11 21:58:22 711

原创 使用android-SerialPort-api时候出现问题(android代码执行shell命令)

最近在搞移动端串口通讯,使用的是官方的接口 android-SerialPort-api,这个接口里面需要对/dev这个文件夹下面的串口文件进行操作所以demo里面要执行su命令对dev文件夹下面的ttySN文件进行权限更改,改为666,所以重点来了我们先看下面的相关代码,if (!device.canRead() || !device.canWrite()) { ...

2018-09-13 16:19:33 1659

原创 TCP/IP OSI详细入门

一.OSI与TCP/IP分层对于网络的分层,OSI 将其分层( 7 层):物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。 TCP/IP分层(3层):网络层、传输层、应用层1.OSI:各层理解物理层:物理接口规范,传输比特流,网卡是工作在物理层的。数据层:成帧,保证帧的无误传输,MAC地址,形成EHTHERNET帧网络层:路由选择,流量控制,IP地址,形成IP包...

2018-07-16 16:55:36 847

原创 Unable to resolve dependency for ':app@debug/compileClasspath': Could not resolve com.android.suppor

刚刚在Android Studio 3.0.1中出现Unable to resolve dependency for ':app@debug/compileClasspath': Could not resolve com.android.support:appcompat-v7:26.1.0无法正常编译,然后百度。可以使用File-&gt;Settings-&gt;Build, Executio...

2018-06-05 14:53:54 2088

原创 android面试——计算机网络

1. OSI与TCP/IP各层的结构与功能,都有哪些协议。 答案:(1)OSI模型OSI(Open System Interconnection,开放系统互连)七层网络模型称为开放式系统互联参考模型 ,是一个逻辑上的定义,一个规范,它把网络从逻辑上分为了7层。每一层都有相关、相对应的物理设备,比如路由器,交换机。OSI 七层模型是一种框架性的设计方法 ,建立七层模型的主要目的是为解决异种网络互连时...

2018-06-01 16:21:21 701

原创 android面试——开源框架的源码解析

1、EventBus(1)通过注解+反射来进行方法的获取注解的使用:@Retention(RetentionPolicy.RUNTIME)表示此注解在运行期可知,否则使用CLASS或者SOURCE在运行期间会被丢弃。通过反射来获取类和方法:因为映射关系实际上是类映射到所有此类的对象的方法上的,所以应该通过反射来获取类以及被注解过的方法,并且将方法和对象保存为一个调用实体。(2)使用Concurre...

2018-06-01 09:00:43 1462

原创 android面試——JVM

1. 内存模型以及分区,需要详细到每个区放什么。 答案:Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有些区域则是依赖用户线程的启动和结束而建立和销毁。根据《Java虚拟机规范(第2版)》的规定,Java虚拟机所管理的内存将会包括以下几个运行时数据区域,如下图所示: 1、程序计...

2018-06-01 08:55:04 3575

转载 从源码看OkHttp3

主要架构和流程OKHttpClient、CallOKHttp3在项目中发起网络请求的API如下:okHttpClient.newCall(request).execute();OKHttpClient类: OKHttpClient 里面组合了很多的类对象。其实是将OKHttp的很多功能模块,全部包装进这个类中,让这个类单独提供对外的API,这种设计叫做外观模式。 ...

2018-04-06 21:49:03 350

原创 android压力测试工具monkey详细介绍

对于一款成熟的app,它不仅在功能上要满足用户需求,他还需具备高度的稳定性。也就是说一款app上线之前,需要进行大量的压力测试,如果这些压力测试是我们手动去进行的,那么必然耗费大量的时间。所以我们们来介绍下面这种高效的android压力测试工具——Monkey Monkey该工具用于进行压力测试。 然后开发人员结合monkey 打印的日志 和系统打印的日志,结局测试中出现的问题。通过Monkey程...

2018-04-03 09:51:48 1034

转载 android面试——数据结构

1. 链表与数组。   2. 队列和栈,出栈与入栈。   3. 链表的删除、插入、反向。 (1)反向链表的定义:   class Node{     public int val;     public Node next;     public Node(int val){this.val=val;}   }反向分为4步:两个临时变量:当前节点curr和前一个节点prev第一步:保存当前节点的下...

2018-03-29 09:21:32 2054

转载 android面试——java基础

1. 九种基本数据类型的大小,以及他们的封装类。 (1)九种基本数据类型和封装类基本类型大小(字节)默认值封装类byte1(byte)0Byteshort2(short)0Shortint40Integerlong80LLongfloat40.0fFloatdouble80.0dDoubleboolean-falseBooleanchar2\u0000(null)Charactervoid--Vo...

2018-03-29 09:13:36 3791

原创 关于static访问外部变量的问题

Java中static方法在访问外部方法和变量时有一些约定,例如:    static方法中在没有创建对象的情况下是不能直接引用非staitc方法或变量的,否则将会发生编译错误:[java] view plain copypackage com.test;  public class Test1 {        int a;      public void printStr()      { ...

2018-03-27 17:35:26 2127

Android知识体系.xmind

整理了本人平时所积累整理的Android知识体系及部分文档

2021-12-12

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除