自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

伟子时代的博客

一枚从事Android开发的小白

  • 博客(32)
  • 收藏
  • 关注

原创 深入理解RxJava编程思想

深入理解RxJava编程思想RxJava前言在RxJava中,一个实现了Observer接口的对象可以订阅(subscribe)一个Observable 类的实例。订阅者(subscriber)对Observable发射(emit)的任何数据或数据序列作出响应。这种模式简化了并发操作,因为它不需要阻塞等待Observable发射数据,而是创建了一个处于待命状态的观察者哨兵,哨兵在未来某个时刻响应Observable的通知。为什么学习RxJava?通过学习RxJava改变思维来提升效率要想弄明白Rx

2021-01-11 14:00:56 474

原创 深入理解Java并发编程

CAS基本原理什么是原子操作?假定有两个操作A和B(A和B可能都很复杂),如果从执行A的线程来看,当另一个线程执行B时,要么将B全部执行完,要么完全不执行B,那么A和B对彼此来说是原子的。如何实现原子操作?实现原子的操作可以使用加锁机制,满足基本需求是没有问题了,但是有的时候我们的需求并非这么简单,我们需要更加有效,更加灵活的机制,synchronized是基于阻塞的锁机制,也就是说当一个线程拥有锁的时候,访问同一资源的其他线程就处于阻塞状态,直到该线程释放锁。那么这里会有一个问题:首先,如果被阻

2020-12-09 00:11:40 341

原创 JavaScript语法(一)

文档对象模型(Document Object Model)是一个应用编程接口(API),用于在HTML中使用扩展的XML,DOM 将整个页面抽象为一组分层节点。HTML 或 XML 页面的每个组成部分都是一种节点,包含不同的数据。比如下面的 HTML 页面:

2023-10-09 13:42:09 128

原创 (一)Dart基本语法

本文讲述了dart的基本语法,为以后进行Flutter开发奠定基础

2022-07-16 10:48:48 1831

原创 2021年终总结

时间转瞬即逝,转眼间,2021年已经过去,2022年即将到来,回首过去的这一年,可以说是在平静中带点波澜吧。这是首次公开写年终总结,其实本来是不想写的,但是看了很多大佬的年终总结,我不得不佩服那些非常自律的大佬,但是我会努力成为那样的人,所以写这篇总结,也算是给自己定一个flag,我觉得有总结才有感想,有感想才有计划,有了计划才能有动力。2021年在生活和学习中都有哪些变化?生活:今年生活中最大的变化就是,我的生命中出现了一个小可爱,从年初老婆怀孕到年末生孩子,在这一年里,我见证了孩子一点一点的变化

2021-12-31 11:18:58 1345

原创 OkHttp源码解析(下)

接着上一篇文章《OkHttp源码解析(上)》继续分析缓存拦截器:缓存拦截器@Override public Response intercept(Chain chain) throws IOException { // 通过url的md5数据 从文件缓存查找(GRT请求才有缓存) Response cacheCandidate = cache != null ? cache.get(chain.request()) : null; long now = Syst

2021-12-03 11:54:42 1126

原创 OkHttp源码解析(上)

导语学过Android开发的同学都知道,我们使用网络请求获取服务器的数据时,通常使用的是封装好的Retrofit框架,这个框架很好的帮助我们对网络的发起,以及返回的数据进行操作,我们使用起来十分方便,对于Retrofit来说,我们仅仅看到了它的表面,如何正确使用等,其内部还是要借助OkHtttp来请求网络的,Retrofit只是对OkHttp进行了再次的封装,而且Retrofit不具备网络请求功能,只是在OkHtttp的外表又套了一层,对返回的数据支持RxJava转换和Gson解析。真正起到网络请求的还是

2021-12-02 16:36:51 2375

原创 深入理解Android跨进程通信—Binder机制

深入理解Android跨进程通信-Binder机制说到binder,很多Android开发者会觉得很复杂,因为binder横跨了整个Android系统架构,从frameworks到kernel,binder无处不在。在日常的面试过程中,binder也是一个绕不开的话题。为啥binder这么重要,跨进程通信方式已经有了管道、socket、共享内存等,为啥Android还要使用binder。今天,我们带着这些问题深入了解下Binder机制。引子日常应用我们平时开发中,可能一些代码反复写了N多次了,所以写

2021-09-02 15:23:59 775

原创 app启动流程——基于Android11分析

前两天分析了Android系统的启动流程后,我们知道Android系统启动最终会走到Launcher,也就是我们所看见的”桌面“,app的启动是从用户点击桌面的icon开始的,当我们点击屏幕上的软件图标时,就可以打开这个软件,这个过程看似也很简单,其实中间包含了很多的底层交互,接下来,我会从源码角度一步一步分析这个流程,看了不明白的,欢迎来打我。。启动流程一(Launcher)我们手机桌面——Launcher其实也是一个app,我们所看见的是它的一个activity,里面是一个RecyclerView包

2021-05-26 10:25:12 1018 7

原创 Android系统启动流程

Android系统启动流程前言了解Android系统启动,最直接的方式就是拿一台手机,当我们要开机使用时,需要怎么做?这个问题看起来很无知,但凡玩过手机的人都知道,按电源键开机嘛。对,是按电源键开机,屏幕会弹出手机品牌logo,过一会就进入桌面了。这是我们所看到的现象,你可知道其中的缘由吗?虽然现象很简单,过程也很快,但是里面是通过多少个流程走到桌面这一步呢,今天就带大家来分析下这看似简单,但又不简单的启动流程。既然要分析流程,那我们就从最开始(按电源键开始)来分析,当我们按下电源键,会执行哪些指令,

2021-05-21 17:14:40 1064 9

原创 Service的启动流程——基于Android11

Service的启动流程——基于Android11最近在重温Android系统的相关知识点,我们都知道Android有四大组件,Activity、Service、Broadcast Receive、Content Provider,像对比其他知识点来说,重温四大组件最好的方式就是跟着源码再走一遍,说起看源码,我们可能会比较头疼,这是因为一旦扎进去,就会陷在代码的海洋里,不知所措,其实分析源码,最忌讳的是一上来就深挖。这样很难出来,不仅费时间,而且也提取不到有用的信息,最好的方式就是先按照主线流程走一遍,先

2021-05-18 11:04:15 1007 1

原创 Android 项目中常用的开源框架

Android 项目中常用的开源框架:Android 之神 Jake WhartonJ神的github:https://github.com/JakeWharton网络请求框架 Retrofit + Gson + Rxjavaimplementation 'com.squareup.retrofit2:retrofit:2.9.0'implementation 'com.squareup.retrofit2:converter-gson:2.5.0'implementation 'com

2021-04-26 17:25:28 217

原创 Android Studio下提交代码到github

Android Studio下提交代码到github1.首先下载Git,将路径添加进AS工具中。然后点击Test键,验证Git是否可用,以及查看Git的版本号。2.在gihub上创建账号,如果这一步完成的话,在AS下登录github。账号密码对应github的账号和密码,我当时登录遇到这个错误:贴出来给大家一个解决方案:这样登录会报错,我们看到右上角有一个Use Token按钮,我们使用token来登录。登录步骤如下:(1)打开github,进入Settings(2)点击Develo

2021-04-26 14:55:44 320

原创 Glide源码大揭秘

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar

2021-04-07 18:06:58 80

原创 Handler面试那些事

Handler面试那些事:1.一个线程有几个handler?无数个,任何地方都可以new handler(),handler机制只有一个。2.一个线程有几个Looper?如何保证?一个,ThreadLocal,在prepare时候先get,如果创建过,则抛异常。private static void prepare(boolean quitAllowed) { if (sThreadLocal.get() != null) { throw new Runti

2021-03-04 20:40:36 129 2

原创 多线程与Android线程性能优化(二)

线程中止线程自然终止要么是 run 执行完成了,要么是抛出了一个未处理的异常导致线程提前结束。stop​ 暂停、恢复和停止操作对应在线程 Thread 的 API 就是 suspend()、resume() 和 stop()。但是这些API 是过期的,也就是不建议使用的。不建议使用的原因主要有:以 suspend() 方法为例,在调用后,线程不会释放已经占有的资源(比如锁),而是占有着资源进入睡眠状态,这样容易引发死锁问题。同样,stop() 方法在终结一个线程时不会保证线程的资源正常释放,通常是

2020-12-02 01:47:52 210

原创 多线程与Android线程性能优化(一)

基本概念1、CPU核心数和线程数的关系首先我们做开发的时候,买台式或者笔记本的时候,都会看几核几线程,例如CPU是4核8线程等等。核心数就是一个计算机的处理器,在计算机的早期,是没有多核这个概念的,引入多核的概念是因为按照摩尔定律,计算机芯片里面晶体管的密度每18个月会翻一番,但是翻到我们现在这个地步时,CPU的晶体管的制程到了3nm,到了极限,翻不动了(这个原因涉及到量子物理里面的量子隧穿),为了继续提高转速,提出了多核心的概念,也就是说在一块物理芯片上集成多个CPU,每个CPU是单独的,也单独执行

2020-11-30 00:04:10 725 1

原创 Java学习笔记(十一)之线程二

线程的生命周期新建:线程实例的创建,即new Thread();就绪:执行.start()方法之后运行:run方法的代码开始执行阻塞:run方法的代码暂停执行,卡住run方法,类似堵车。死亡:自然死亡:程序执行完毕或者程序发生了异常导致程序结束​ 强制死亡:执行.stop()方法、断电、杀掉进程。从下图可以明显地看出线程的生命周期:线程同步有如下场景:同一个账户,可以通过支付宝转账,也可以通过微信转账,两个手机,一个手机打开支付宝,一个手机打开微信,假设账户上有3

2020-11-27 17:43:26 136 1

原创 Java学习笔记(十一)之线程一

线程程序、进程、线程的概念电脑CPU:中央处理器CPU的核数:CPU的物理核,几核的CPU,就代表同一个瞬时时间能处理的任务数。程序(progrem):一段静态代码进程(process):正在运行的一个程序线程(thread):一个进程内部的一条执行路径主频:CPU切换进程的频率核数差别不大,主频高的好一些;主频差别不大,核数多的好一些。多线程:一个进程(一个程序运行时),可以分化为并行执行多个线程。何时需要多线程?程序需要同时执行两个多个任务程序需要实现一些需要等待的任务时,如用

2020-11-24 23:21:53 111

原创 Java学习笔记(十)之反射,动态代理

反射java能够反射的前提:已经加载过这个类,就可以通过类名来寻找到这个类的所有相关信息就跟人类的记忆反射一样,事先在记忆中有了这个事物的具体信息,人就可以通过名字来记忆中寻找相关事务的具体信息Reflection(反射)是被视为动态语言的关键,反射机制允许程序在执行期借助Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性及方法。Java反射机制提供的功能在运行时判断任意一个对象所属的类在运行时构造任意一个类的对象在运行时判断任意一个类所具有的成员变量和方法在

2020-11-23 13:44:24 125 1

原创 Java学习笔记(九)之IO操作二

缓冲流(重点)缓冲流就是先把数据缓冲到内存中,在内存中做IO操作,基于内存的IO操作大概能比基于硬盘的IO操作快75000多倍。缓冲字节流public class Test { public static void main(String[] args) { Test.BufferedInputStream("D:\\demo\\test11.txt"); Test.BufferedOutputStream("一个小demo!!!", "D:\\demo\\a

2020-11-21 12:18:12 166 2

原创 Java学习笔记(九)之IO操作一

IO流java.in.File类的使用java.in.File指的是计算机操作系统中的文件和文件夹IO原理及流的分类IO:指的就是input和output流的概念:通过程序把一个图片放到某个文件夹,把图片转化为一个数据集(例如二进制),把这些数据一点一点传到文件夹,这个传递的过程就很类似水的流动,我们就可以称这个整体的数据集是一个数据流。文件流数据流的读写基于文件操作FileInputStream / FileOutputStream / FileReader / FileWriter缓冲

2020-11-19 14:00:54 94

原创 Java学习笔记(八)之泛型,枚举,注解

泛型Java中的泛型,只在编译阶段有效泛型类对象实例化时不指定泛型,默认为:Object泛型不同的引用不能相互赋值public class Test { public static void main(String[] args) { A<String> a = new A<>(); //在new A的对象指定泛型的类型String a.setKey("xxxx"); //对象使用setKey(T key)方法,中的k

2020-11-18 13:50:33 189

原创 Java学习笔记(七)之集合

集合HashSet集合HashSet是Set接口的典型实现,我们大多数时候说的set集合指的都是HashSet。HashSet具有以下特点:不能保证元素的排列顺序 ------>存在set集合哪个位置由这个值的hashCode决定不可重复------->不可重复,指的是hashCode不相同HashSet不是线程安全的集合元素可以是nullpublic class Test { public static void main(String[] args) {

2020-11-14 16:50:53 109

原创 Java学习笔记(六)之异常

异常Java标准库内建了一些通用的异常,这些类以Throwable为顶层父类。Throwable又派生出Error类和Exception类。错误:Error类以及他的子类的实例,代表了JVM本身的错误。错误不能被程序员通过代码处理,Error很少出现。因此,程序员应该关注Exception为父类的分支下的各种异常类。异常:Exception以及他的子类,代表程序运行时发送的各种不期望发生的事件。可以被Java异常处理机制使用,是异常处理的核心。public class Test { pu

2020-11-13 12:03:58 135

原创 Java学习笔记(五)之抽象类,接口,工厂模式

抽象类动物具体移动方式没法在动物类中去写,所有动物类和其方法都是抽象化处理,就不写具体的实现。用abstract关键字修饰一个类时,这个类叫做抽象类。用abstract关键字修饰一个方法时,这个方法叫做抽象方法。不能被实例化只要类中有一个抽象的方法,那么这个类就必须是一个抽象类public abstract class Animal { public abstract void move();}class Dog extends Animal {

2020-11-13 00:01:19 248

原创 Java学习笔记(四)之类型转换,单例模式

对象类型转换(Casting)基本数据类型的转换自动类型转换:小的数据类型可以自动转换成大的数据类型long g = 20; double d = 12.0f强制类型转换:可以把大的数据类型强制转换成小的数据类型float f = (float) 12.0; int a = (int) 1200L对Java对象的强制类型转化成为造型从子类到父类的类型转换可以自动进行从父类到子类的类型转换必须通过造型(强制类型转换)实现无继承关系的引用类型间的转换是非法的。public c

2020-11-07 18:05:58 200 1

原创 Java学习笔记(三)之继承,多态

Java学习笔记(三)继承:extends把共性的东西抽取出来行为父类,实际需求的子类在继承父类的基础上写自己特有代码即可。作用:提高代码复用性继承的出现让类与类之间产生了联系,提供了多态的前提不要仅为了获取其他类中某个功能而去继承子类不是父类的子集,而是对父类的“扩展”java只支持单继承,不允许多重继承方法的重载:一个类可以有多个同名方法方法的重写:子类可以重新写父类的方法,覆盖父类的方法@Overridepublic void employed() { Syst

2020-11-05 22:29:08 203 2

原创 Java学习笔记(二)之构造,重载

Java学习笔记二一、面向对象综述:面向对象就是基于面向过程,就是把过程封装起来,去调用。面向对象的三大特征:封装,继承,多态。1.面向对象开发面向对象开发就是不断的创建对象,使用对象,指挥对象做事情。类和对象的概述类与事物的对应关系类事物成员变量属性成员方法行为面向对象的思想概述可以理解为:类 = 汽车设计图;对象 = 实实在在的汽车面向对象程序设计的重点是类的设计定义类其实是定义类中的成员(成员变量和成员方法)2.成员变

2020-11-04 17:43:44 129

原创 Java学习笔记(一)之基本数据类型,循环结构,数组

这里写自定义目录标题Java学习笔记1.八种基本数据类型2.引用类型3.基本数据类型转换 小-->大4.“&”和“&&”的区别:5.二进制6.三目运算符7.运算符优先级:8.循环结构 for while9.数组一维数组二维数组10.数组常见错误Java学习笔记1.八种基本数据类型byte short int long float double char boolean1字节 2字节 4字节 8字节 4字节 8字节8bit

2020-11-03 17:28:58 189

原创 String StringBuffer StringBuilder的区别

String StringBuffer StringBuilder的区别文章目录系列文章目录 前言 一、String是什么? 二、StringBuffer又是什么? 三、StringBuilder 四、Java9改进一、String是什么?百度百科中对String的解释是这样的:string是C++、java、VB等编程语言中的字符串,字符串是一个特殊的对象,属于引用类型。 在java、C#中,String类对象创建后,字符串一旦初始化就不能更改,因为stri...

2020-10-16 11:09:00 195

转载 Android的死机、重启问题分析方法

Android的死机、重启问题分析方法原文链接:https://blog.csdn.net/jinlu7611/article/details/505923851.死机现象1.1 死机定义当手机长时间无法再被用户控制操作时,我们称为死机。在这里我们强调长时间,如果是短时间,归结为性能问题。1.2 死机表现用户操作手机无任何响应,如触摸屏幕,按键操作等。手机屏幕黑屏,无法点亮屏幕。手机界面显示内容和用户输入不相干。系统简图当用户对手机进行操作时,对应的

2020-06-01 10:26:16 7195 1

空空如也

空空如也

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

TA关注的人

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