自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(43)
  • 收藏
  • 关注

原创 大白话描述Android事件分发 -简洁版

事件分发机制是Android十分重要的一个机制,在日常开发过程中,我们时常需要利用它的一些特性去完成我们的需求。今天笔者就用比较通俗的话来讲一下,笔者对于事件分发机制的认识和理解。事件分发系列,笔者准备写两篇,一篇基础版,一篇进阶版,在基础版中,笔者只会讲事件分发的基本流程,以及处理方式,而在进阶版中,笔者准备对一些必要的知识进行展开。...

2022-07-07 18:39:04 703 1

原创 OkHttp - 拦截器篇

根据上一篇 核心流程 ,我们大致知道了okhttp的内部运转,但是对于网络请求的缓存、连接复用以及网络监控的功能的实现,我们是只知其然,而不知其所以然,我们只知道是负责各个功能的拦截器帮助我们完成了底层的任务,但是却不知道原理是什么。今天跟着笔者继续学习Okhttp各个拦截器的原理实现。限于篇幅,在文章中,笔者只对相关拦截器的intercept方法进行了分析,但是并没有展开,有兴趣的同学可以自己去看。...

2022-06-24 23:06:32 1837

原创 Android异步消息机制 - Handler系列 (3)

哈喽哈喽~ 笔者在过去一个月都在准备考试,所以没有更新啦,现在又和大家见面了,这是笔者的第三篇Handler文章,主要是为了给出笔者在使用和学习过程中,对于handler的一些思考,以及补充在过去两篇文章中未提到的,但是仍然重要的知识点。...

2022-06-20 19:41:31 331

原创 我的小工具-卡片学习APP 完成啦

在过去的十天里,我都做了些什么?说好的要准备秋招,咋又不见了?实际上在过去的十天里,我也在为秋招努力(完善自己准备的小项目),很高兴今天将整个APP的初稿完成了,《卡片学习》是一款Android系统的工具APP,由于审核材料问题,目前并未上架,只是在蒲公英上传了内测版本(这里就不贴链接了)。源码开源在GitHub - CardStudy。如果有同学想要练手项目可以去拿,不过别忘了star一下嘻嘻~。...

2022-06-20 19:39:28 272

原创 Android 异步消息机制 Handler - 系列 (2)从源码深入了解Handler

前几天笔者分享了对于Handler的一些浅显的认识与使用,相信想要在Android方向继续学习下去的同学们一定不会止步于上个阶段,那么笔者今天就和伙伴们一起进阶,去详细的了解Handler的工作流程以及它的四大成员的详细分析。如果没有阅读过上个阶段的伙伴想要去了解的话,可以到本站Android目录下查看。注: 文中所有源码基于Android 10Handler的运行流程先上一张图解,该图片是从gityuan 大佬哪搞来的,实际上这就是整个Handler的工作流程了。先给出这张图让大家在整体上能有一些概

2022-05-14 21:36:33 394

原创 Android 异步消息机制 Handler机制 - 系列(1)

这是我的第一篇Handler文章,也是我秋招准备的第一战,共勉!在过去的面试中多次被问到Handler,可见Handler在Android中的地位,所以我们很有必要好好的学习一下该机制,那就跟着笔者好好的整理一下Handler吧。接下来我们就浅聊一下Handler。Handler的用处通俗的讲,整个异步消息机制其实就是为了方便我们在多线程环境下的开发。先放官方给的:There are two main uses for a Handler: (1) to schedule messages and

2022-05-10 17:17:56 701

原创 Okhttp核心流程概述

基于Okhttp 4.9.3版本源码讲述了Okhttp的核心流程原理以及简单实用

2022-04-11 16:38:36 393

原创 Java的那些 “锁” 事 - 概念篇

本文章给大家分享了笔者对于 Java 中锁的相关认识,将锁按照其特性进行了分类的描述,最后对于synchronized 的锁升级过程也进行了简单的叙述。

2022-04-10 11:11:19 459

原创 LinkedList 与 ArrayList 的简单比较

两种容器的简单比较

2022-04-09 14:42:10 339

原创 Arouter路由原理-简述

很想写一篇关于路由的文章,但是由于一些原因一直没有去完成,直接使用了Arouter作为路由方案,进行了我的组件化改造之路。最近经过一些鞭打,我发现我并不能完整的表达出来,所以我还是决定再去了解了解它的原理,博文内容仅代表个人意见,并且由于本人知识有限,如有错误,敬请指正!谢谢!

2022-03-28 21:52:55 1083

原创 Android 组件化架构-简谈

说在前面:随着业务的增加,由于单一工程下业务全都集合在主工程下,而导致业务间相互交错的依赖耦合越来越严重,那么就可能出现动一触千的现象,这时候将业务按照功能的不同抽离出来就显得迫在眉睫。了解组件化在了解组件化之前,我们需要先了解模块化。模块化就是将整体业务集合按照功能的不同,抽离到不同的模块中,这样做的好处就是在团队协助中能够较好的区分各自负责的功能模块、也能使得整个工程显得不是那么庞大和复杂。但是在工程结构不断扩大的情况下,模块之间的耦合也会变的错综复杂,这时候我们就需要将模块化再次升级,使得各

2022-03-14 21:07:15 6871

原创 Java 类加载机制&类加载器&双亲委派模型

类加载过程类的生命周期加载 → 连接 → 初始化 → 使用过程→ 卸载类的加载就是前三步其中连接又可分为三步 : 验证 → 准备→ 解析现在我们对整个类加载过程进行分析加载类的加载需要完成三件事:通过全类名获取定义此类的二进制字节流将字节流所代表的静态存储结构转换为方法区的运行时数据结构在内存中生成一个代表该类的 Class 对象,作为方法区这些数据的访问入口一个非数组类的加载阶段(加载阶段获取类的二进制字节流的动作)是可控性最强的阶段,这一步我们可以去完成还可以自定

2022-01-05 18:43:22 194

原创 Java GC 垃圾收集机制概要

概要Java垃圾回收主要是发生在堆上,我们先来看看堆的结构图解在之前的内存区域分析中我们知道,Java堆被分了新生代和老年代,而分代的目的就是为了更好的进行内存回收和分配。其实再细致一点分,我们可以将堆分为 Eden、From Survivor0、To Survivor1 和Old Memory 其中前三个就是我们所说的新生代,Old Memory就是老年代。我们先在前面说明Java在堆上进行内存分配 的常见策略:优先在Eden区分配长期存活的对象进入老年代大对象直接进入老年代堆上所有

2022-01-02 14:27:05 533

原创 Java 基础知识一览-简版

基础概念与常识Java语言的特点简单易学面向对象平台无关性支持多线程可靠性安全性支持网络编程编译与解释并存JVM、 JDK、 JREJVM :运行Java程序的虚拟机。为了能使用相同的字节码得出相同的结果,对于不同的系统JVM具有不同的特定实现。JDK与JREJRE : Java运行时环境。它是运行已编译 Java 程序所需的所有内容的集合,包括 Java 虚拟机(JVM),Java 类库,java 命令和其他的一些基础构件。但是,它不能用于创建新程序。JDK(Java De

2022-01-01 11:45:45 369

原创 Java JVM运行时内存区域-简解

Java 运行时数据内存区域我们首先给出Java内存区域的图解 ,分别给出JDK1.8之前和之后的进行对比。(图片来自网络)JDK1.8之前:JDK1.8之后:通过上面的图解我们可以发现,JDK1.8前后的JAVA虚拟机的数据区域是有改动的。最明显的就是将方法区移除了,取而代之的是在本地内存中的元空间。而且通过图解我们可以知道:在一个进程中属于线程私有的是:程序计数器本地方法栈虚拟机栈属于线程共享的是:堆方法区(元空间)直接内存接下来我们分别对这些进行介绍:程序计数

2022-01-01 11:18:51 658

原创 Java常用容器-简解

ArrayListArrayList 的底层是数组队列,相当于动态数组。与 Java 中的数组相比,它的容量能动态增长。在添加大量元素前,应用程序可以使用ensureCapacity操作来增加 ArrayList 实例的容量。这可以减少递增式再分配的数量。ArrayList继承于 AbstractList ,实现了 List, RandomAccess, Cloneable, java.io.Serializable 这些接口。RandomAccess 是一个标志接口,表明实现这个这个接口的 Lis

2022-01-01 11:13:22 277

原创 Java并发编程的那些事-简版

synchronized关键字synchronized关键字的作用是:解决在多线程的环境下,访问资源的同步性问题,也就是说被该关键字修饰的方法或代码块在任意时刻内只能被一个线程访问。三种主要的用法:修饰实例方法:作用于当前对象实例加锁,进入同步代码前要获得 当前对象实例的锁修饰静态方法 :给当前类加锁,会作用于类的所有对象实例 ,进入同步代码前要获得 当前 class 的锁修饰代码块 :指定加锁对象,对给定对象/类加锁。synchronized(this|object) 表示进入同步代码库前要获得

2022-01-01 11:05:41 159

原创 计算机网络篇-应用层

应用层域名系统DNSDNS 是一个分布式数据库,提供了主机名和 IP 地址之间相互转换的服务。这里的分布式数据库是指,每个站点只保留它自己的那部分数据。域名具有层次结构,从上到下依次为:根域名、顶级域名、二级域名。DNS 可以使用 UDP 或者 TCP 进行传输,使用的端口号都为 53。大多数情况下 DNS 使用 UDP 进行传输,这就要求域名解析器和域名服务器都必须自己处理超时和重传从而保证可靠性。在两种情况下会使用 TCP 进行传输:如果返回的响应超过的 512 字节(UDP 最大只支持

2021-11-19 16:35:52 121

原创 计算机网络篇-运输层

运输层运输层向上层应用层提供通信服务。运输层是端到端的通信,也就是说通信的两端是两个主机中的应用进程。运输层还有一个很重要的功能 :分用、复用。运输层的两个主要协议用户数据报协议UDP :不需要建立连接传输控制协议TCP :提供面向连接的服务端口前面提到的分用、复用就是利用了端口进行的。在应用层和运输层之间设置一个抽象的门,这些门就是通信的抽像终点也被称为端口,当应用层的应用进程要通过运输层发送到互联网时,必须要通过这个门,而别的主机上的应用进程要寻找本主机中的某个应用进程也需要通过整个门

2021-11-18 21:36:38 1913

原创 计算机网络篇- 网络层

网络层两类信息 :1.转发源主机和目的主机之间所传送的数据。2.传送路由信息。网际协议IP间接交付 :需要经过一个或者几个路由器转发(也就是说通信双方不在同一网络)。直接交付 : 不需要通过路由器的转发(在同一网络)。跳 :一次分组转发下一跳 : 下一次转发,通常用于指下一次转发所到达的路由器。IP地址编址方式分类由两部分组成,网络号和主机号,其中不同分类具有不同的网络号长度,并且是固定的。IP 地址 ::= {< 网络号 >, < 主机号 >}无分类编

2021-11-13 14:41:04 3215

原创 计算机网络篇-数据链路层

数据链路层链路 :就是从一个节点到相邻节点的一段物理线路(无线或有线),而中间没有任何其他的交换节点。数据链路 :链路加上一些必要的协议就构成了数据链路。帧 :数据链路层的协议数据单元。三个基本问题1、封装成帧封装成帧就是在一段数据的前后加上首部和尾部,这样就构成了一个帧。添加首部尾部的作用是用于帧定界(确定帧的界限)。最大传送单元MTU :数据部分长度的上限。SOH(Start Of Header):首部的开始,ASCII编码为01.EOT(End Of Transmission):表

2021-11-03 19:19:59 694

原创 计算机网络篇 - 物理层

部分图片参考地址 : https://github.com/CyC2018/CS-Notes物理层物理层的主要任务是描述为确定与传输媒介的接口有关的一些特性机械特性 : 指明接口所用接线器的形状和尺寸、引脚数和排列、固定和锁定装置等。电气特性 : 指明在接口电缆的各条线上出现的电压范围。功能特性 :指明某条线上出现的某一电平的电压意义。过程特性 : 指明不同功能的各种可能事件的出现顺序。数据在通信线路上一般是串行,而在计算机内部一般是并行。数据通信系统可划分为三大部分 :源系统(发送方)

2021-09-23 19:11:13 1509

原创 计算机网络篇 -概述

部分图片及知识点参考地址 https://github.com/CyC2018/CS-Notes/blob/master/notes/%E8%AE%A1%E7%AE%97%E6%9C%BA%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F%20-%20%E7%9B%AE%E5%BD%95.md概述互联网基本特性:1.连通性 2.共享性计算机网络: 把许多计算机连接在一起。。**互连网 **: 通过路由器将许多计算机网络连接在一起。互联网 : 特指采用TCP/IP协议族作为通信

2021-09-22 14:18:40 108

原创 HTTP图解-摘要笔记

网络基础TCPTCP/IP协议族按层次分别有以下四层:应用层、传输层、网络层和数据链路层。应用层:应用层决定了向用户提供应用服务时通信的活动。HTTP协议、DNS服务属于应用层传输层:传输层对上层应用层,提供处于网络连接中的两台计算机之间的数据传输。TCP(传输控制协议)和UDP(用户数据报协议)属于传输层网络层:用来处理在网络上流动的数据包。该层规定了通过怎样路径到达对方计算机,并把数据包传送给对方。与对方计算机之间通过多台计算机或者网络设备进行传输时,网络层所起的作用就是在众多的选项中选择一

2021-08-15 16:20:13 422

原创 Android四大组件之广播浅谈

广播主要分为两类:标准广播、有序广播标准广播:一种完全异步执行的广播。也就是说这种广播发送之后是不受其它广播接收者的影响的或者说无序的,这样几乎所有的广播接收者将在同一时间收到该广播。Kotlin写法://发送标准广播val intent =Intent("需要发送的广播值")intent.setPackage(packageName) //由于android8.0之后规定 静态注册的广播接收者不能接收隐式广播(少数特殊除外),//所以需要在这里指定是发个哪个应用程序的。 动态注册可以不需要。

2021-07-26 11:43:37 248

原创 Android四大组件之Service浅谈

Service生命周期onCreateService首次被创建(startService())或者绑定(bindService())时回调。onStartCommand当调用startService()方法时回调,若在此之前没有创建Service那么onCreate()会在onStartCommand()之前调用。onBindService被绑定(bindService())时回调。若在此之前没有创建Service那么onCreate()会在onBind()之前调用。并且调用方可通过该方法获得

2021-06-10 10:46:10 112

原创 Activity的四种启动模式和三种跳转方式

四种启动模式standardstandard模式是创建activity时默认的启动模式,当activity被定义为该模式时,它的实例会在启动时压入task栈中,并且同时允许出现多个实例在同一个栈中,那么无论当前栈顶元素是否是它本身,他都会简单地新建一个实例,并将其压入到栈顶。singleTopsingleTop模式:当activity被设置为该模式时允许出现多个实例在同一个栈中,但是若被启动的activity处于当前栈顶位置,那么并不会再重新创建实例,反之,如果不处于栈顶则会被重新创建并且压入栈顶

2021-06-07 16:42:50 2293

原创 Android架构模式之 MVVM模式

MVVM模式简介MVVM模式就是由View层 ViewModel层 以及Model层组成的。View层就是控制布局和外观Model层是获取业务数据模型ViewModel则负责处理View中的业务逻辑和处理数据MVVM模式中我们不需要再使用findviewbyid等方式去为具体的view设置内容等,而是借用DataBinding工具以ViewModel为桥梁将数据和视图进行双向绑定,当其中任意一方改变,另一方也会随之改变。...

2021-05-16 18:52:52 690 3

原创 Android单例模式 Double -Check 写法

Android设计模式单例模式单例模式的概念:确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。优点:对于那些比较耗内存的类,只实例化一次可以大大提高性能,尤其是在移动开发中。保持程序运行的时候该中始终只有一个实例存在内存中单例有很多写法 如:饿汉式, 懒汉式 , 双重校验锁, 静态内部类写法等 ,这里我们介绍的是双重校验锁的写法单例模式 - Double Check//java写法public class SingleDemo{private volatile

2021-05-10 11:37:25 441

原创 浅谈JAVA面对对象的理解

浅谈JAVA面对对象思想的理解面对对象是一种程序设计思想,相比较面对过程编程而言,面对对象并不在乎功能实现的过程,而是注重于得到的结果比如说:我饿了想要吃饭,于是我就在外卖平台点了外卖,但是我并不在乎外卖平台让哪个外卖小哥送,外卖小哥是通过什么交通方式或者经过哪条路来的,因为只要我最后能吃到饭就行。将上面的例子再细一点说明的话就更好理解了外卖平台可以认为就是我们所说的对象让用户吃到点的外卖也就是 对象的功能将外卖送到我们手上的过程 就是实现的方法开始刨析我们饿了要吃饭就是需求,那么我们就找

2021-05-09 21:05:14 89

原创 Android_Widget中Listview的用法

环境:win10编译软件 : AS这里只讲listview的基础用法,建议先查询widget相关知识后再来先利用AS创建一个ListWidget,系统会自动帮你生成一个AppWidgetProvider,以及布局文件 /xml中的list_widget_info.xml和/layout中的list_widget.xml这里就不具体介绍了。开始我们的小例子叭list_widget.xml中添加listview控件<LinearLayout xmlns:android="http://sche

2021-01-31 12:08:14 1336

原创 利用Intent传递对象类型的数据 Kotlin

Intent传递对象需要序列化对于Intent序列化有两种方法一种是Serializable,另一种是Parcelable。这里我用到的是Parcelable 因为在Kotlin实现里Parcelable有一种特别方便的实现,不需要写过多的逻辑。build.gradle添加pluginapply plugin: 'kotlin-android-extensions'然后在android节点下添加以下代码:(因为该特性当前属于实验特性)android {... androidExt

2020-12-10 16:33:18 2180

原创 报错Unable to add window -- token null is not valid; is your activity running?

在显示dialog时出现,是应用没有token所导致,而应用的token一般只有Activity拥有,所以需要用Activity作为context(上下文)来显示对话框即可,即如果不在activity内用new Dialog(getActivity())即可如果是在activity内直接用this就行了(用了全局context的童鞋们,注意这里不可以使用我们定义的Myappcalition.context而是用该activity的context)...

2020-12-04 16:52:20 6048

原创 报错Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK

这是因为你用的是Context的startActivity()需要在一个新的task里面执行添加下面的代码就行了。intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK )那么为什么在activity内不会报错呢这是因为activity继承了Context并且重载了该方法,所以使用起来不会有任何限制。...

2020-12-04 16:44:57 11039 1

原创 实现动态添加fragment到viewpager和tablayout

这里的需求是动态的添加一个fragment到viewpager以及tablayout新增一个tab效果图如下(动图就没弄了,别问 问就是懒!!!!)也就是点击右边的加号可以添加fragment到viewpager 然后tablayout也要多一个tab选项开始实现(原理)创建一个mFragment继承Fragment这里主要是为了业务需求,因为添加的fragment肯定不会只是一个空白的fragment叭 所以需要在mFragment里面实现需要的逻辑和一些布局布局文件里添加vi

2020-11-28 11:47:18 996 2

原创 tablayout如何设置字体大小,颜色等属性

tablayout如何设置字体大小 颜色等属性用了tablayout后会发现在xml文件内是没有textSize 和textColor 等这些属性的,想要设置这些属性,我们需要给他创建一个样式,具体操作如下:先在res/values/styles.xml文件内添加如下样式:<style name="TabTextSize" parent="TextAppearance.AppCompat.Widget.ActionBar.Title.Inverse"> <item na

2020-11-28 10:52:06 2386

原创 Android(Kotlin)创建全局context解决在有些地方获取不到上下文context

创建全局context以解决在有些地方获取不到上下文context首先创建一个类 类名叫MyApplication 如下class MyApplication : Application() { companion object{ @SuppressLint("StaticFieldLeak") lateinit var context: Context } override fun onCreate() { super.onC

2020-11-20 20:37:48 4931

原创 将图片用字节数组存到数据库中,以及从数据库中读取

将图片转换成字节数组先将图片转换成Bitmap对象(代码省略)然后声明并创建一个输出字节流的对象val os= ByteArrayOutputStream()再调用compress将Bitmap对象压缩成PNG格式bimap.compress(Bitmap.CompressFormat.PNG,100,os)//第二个参数为100表示图片质量不压缩//第三个参数为接收压缩后数据的容器最后将字节输出流转换成字节数组val byte=os.toByteArray()然后就可以把这

2020-11-14 15:30:47 1060

原创 利用工具类解决intent传输数据有安全限制

E/JavaBinder: !!! FAILED BINDER TRANSACTION !!! (parcel size = 1571892),当出现这个报错的时候很可能是因为在向A->B传递数据时由于intent的安全限制,如果数据量过大会报错。解决方法有很多种可以压缩传递,借用操作类等等。我现在用到的是操作类去完成数据在不同活动间的传递:object DataHolder { private val bigData :MutableMap<String,Any> = mut

2020-11-14 14:37:51 306

原创 安卓浸入式状态栏的实现

效果图:实现这样的效果有很多方法 :方法一:直接在该页面的Activity内添加如下代码:class WeatherActivity : AppCompatActivity() { val viewModel by lazy { ViewModelProviders.of(this).get(WeatherViewModel::class.java) } override fun onCreate(savedInstanceState: Bundle?) { s

2020-10-25 19:41:47 326

空空如也

空空如也

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

TA关注的人

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