- 博客(143)
- 资源 (8)
- 收藏
- 关注
原创 进程间通信机制 Binder原理讲解笔记
在拆解分析Binder之前先上一张Binder架构图,总体对Binder有一个整体了解:Binder跨进程通信机制:基于C/S架构,由Client、Server、Server Manager和Binder驱动组成。下面的介绍我们主要也是从这几个方面进行分析。一直在说Binder,那么Binder到底是什么东西呢?概括来说Binder:跨Android进程通信的机制Binder是一个驱动Binder.java实现了IBinder接口从而具备了跨进程的能力。
2025-03-26 10:44:26
322
原创 Kotlin语言基础笔记
Kotlin是一门非常方便的开发语言,它的语法糖有很多,要想要很熟练的掌握kotlin语言,只有不断地使用kotlin写代码,从而达到量到质的一个改变。本文也只是介绍其中的一点内容,内容很松散,有些知识点需要自己动手去写,去实现才能真正体会其中的魅力。
2025-03-16 17:10:39
754
原创 AMS分析笔记
最后梳理一下整个AMS的启动过程:当流程走到systemReady的时候,那就证明前面提到的到80多个服务已经初始化了。那接下来就会启动SystemUI进程(在startOtherServices方法中的mActivityManagerService.systemReady()方法中):// 省略部分代码......// 这里面会启动SystemUI// 省略部分代码......// 启动桌面...// 省略部分代码......
2025-03-05 21:37:54
1203
原创 自定义View笔记
布局: onLayout onMeausure / Layout:viewGroup显示: onDraw :view: canvas paint matrix clip rect animation path(贝塞尔) line text绘制交互: onTouchEvent :组合的viewGroup。
2025-02-23 22:32:15
782
原创 Android 虚拟机与ClassLoader类加载笔记
将Demo.class文件使用命令:javap -c .\Demo.class 反编译一下字节码文件,得到如下的结果:到这里,我们的Demo展示完了,随着我们接下来内容的介绍,将会使用到该字节码的内容。我们在介绍Android的虚拟机之前,先了解一下一些相关的概念。1.1 JVM与DalvikAndroid应用程序运行在Dalvik/ART虚拟机,并且每一个应用程序对应有一个单独的Dalvik虚拟机实例。
2025-02-17 18:24:13
1208
原创 JVM内存管理笔记
OutOfMemoryError(OOM)是JVM在尝试为对象分配内存但没有足够的内存空间时抛出的错误。这通常发生在堆内存(Heap Memory)被耗尽时。
2025-02-16 14:38:47
800
原创 Java并发编程笔记
早期计算机中cpu和内存的速度是差不多的,但在现代计算机中,cpu的指令速度远超内存的存取速度,由于计算机的存储设备与处理器的运算速度有几个数量级的差距,所以现代计算机系统都不得不加入一层读写速度尽可能接近处理器运算速度的高速缓存(Cache)来作为内存与处理器之间的缓冲:将运算需要使用到的数据复制到缓存中,让运算能快速进行,当运算结束后再从缓存同步回内存之中,这样处理器就无须等待缓慢的内存读写了。从上至下,每一层都可以看做是更下一层的缓存,即:L0寄存器是L1一级缓存的缓存,L1是L2的缓存,依次类推;
2025-02-07 17:05:21
645
原创 RxJava笔记
我们介绍RxJava中的线程切换主要是通过subscribeOn和observeOn操作符展开,对于线程切换Android中主要是子线程与主线程,在我们使用RxJava时会同步引入RXAndroid的包,为什么要同步引入RxAndroid的包呢,主要还是互相补充的原因,因为RxAndroid的包中包含的是Android特性的一些功能实现。RxJAVA也就完成了80%的内容,RxAndroid来补充了剩余的20%的实现。// 依赖RxAndroid 2X 的依赖库// 增加RxJava 2X 的依赖库。
2025-02-07 16:46:17
822
原创 Android 自定义流式布局
先上效果具体实现请参考如下:import android.content.Context;import android.os.Build;import android.support.annotation.RequiresApi;import android.util.AttributeSet;import android.view.View;import android.view.ViewGroup;import java.util.ArrayList;import java
2022-03-27 15:19:43
2607
2
转载 Android 描述一下应用进程的启动过程
大致为下面概括描述1,点击桌面应用图标,Launcher 进程将启动 Activity(MainActivity)的请求以 Binder 的方式发送给了 AMS。2,AMS 接收到启动请求后,交付 ActivityStarter 处理 Intent 和 Flag 等信息,然后再交给 ActivityStackSupervisior/ActivityStack3,处理 Activity 进栈相关流程。同时以 Socket 方式请求 Zygote 进程 fork 新进程。4,Zygote 接收到
2020-09-19 15:20:25
186
原创 JAVA 二分查找
1. 二分查找原理图2. 分查找代码实现public class BinarySearch { public static void main(String[] args) { // TODO Auto-generated method stub int[] arr = {11,22,33,44,44,55,55,66}; int index = binarySearch(arr,55); System.out.println("index : " + inde
2020-09-02 14:25:58
218
原创 JAVA 冒泡、选择排序算法
1. 冒泡排序/** 冒泡排序基本概念是:* 依次比较相邻的两个数,将小数放在前面,大数放在后面。* 即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。* 然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,* 直至比较最后两个数,将小数放前,大数放后。至此第一趟结束,* 将最大的数放到了最后。在第二趟:仍从第一对数开始比较* (因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),* 将小数放前,大数放后,一直比较到倒数第二个数(倒数第...
2020-09-02 14:10:40
175
原创 JAVA 网络编程多线程上传文件
1. UploadClient.javaimport java.io.BufferedReader;import java.io.BufferedWriter;import java.io.FileReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.net.Socket;public class UploadCli
2020-08-27 21:41:02
356
原创 JAVA 多线程常见的问题
1:多线程有几种实现方案,分别是哪几种? 两种。 继承Thread类 实现Runnable接口 扩展一种:实现Callable接口。这个得和线程池结合。2:同步有几种方式,分别是什么? 两种。 同步代码块 同步方法3:启动一个线程是run()还是start()?它们的区别? start(); run():封装了被线程执行的代码,直接调用仅仅是普通方法的调用 start():启动线程...
2020-08-27 10:05:51
117
原创 JAVA IO小结
package com.wdy.charIO;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStreamReader;import ja.
2020-08-23 13:07:01
164
原创 JAVA catch里面有return语句,请问finally里面的代码还会执行吗?
* 如果会执行,请问是在return前,还是return后。* 会。前。public class FinallyDemo { public static void main(String[] args) { System.out.println(getInt()); } public static int getInt() { int a = 10; try { System.out.println(a / 0); a = 20; } catch ...
2020-08-21 14:30:27
785
1
原创 JAVA final,finally和finalize的区别
* final:最终的意思,可以修饰类,成员变量,成员方法* 修饰类,类不能被继承* 修饰变量,变量是常量* 修饰方法,方法不能被重写* finally:是异常处理的一部分,用于释放资源。* 一般来说,代码肯定会执行,特殊情况:在执行到finally之前jvm退出了* finalize:是Object类的一个方法,用于垃圾回收...
2020-08-21 14:19:39
162
原创 JAVA 集合特点概述
1.Collection(单列集合) 1.1 List(有序,可重复) ArrayList 底层数据结构是数组,查询快,增删慢 线程不安全,效率高 Vector 底层数据结构是数组,查询快,增删慢 线程安全,效率低 LinkedList 底层数据结构是链表,查询慢...
2020-08-20 17:36:46
133
原创 JAVA Hashtable和HashMap的区别
Hashtable:线程安全,效率低。不允许null键和null值HashMap:线程不安全,效率高。允许null键和null值其他都一样,其实HashMap是用来替换Hashtable的。
2020-08-20 16:38:24
133
原创 JAVA HashMap遍历讲解
package com.wdy.hashmap;import java.util.HashMap;import java.util.Map;import java.util.Set;public class HashMapDemo { public static void main(String[] args) { // TODO Auto-generated method stub // 创建Hashmap对象 HashMap<String,String> map.
2020-08-20 13:28:40
267
原创 JAVA Collection集合总结
1. Collection集合总结 Collection |--List 有序,可重复 |--ArrayList 底层数据结构是数组,查询快,增删慢。 线程不安全,效率高 |--Vector 底层数据结构是数组,查询快,增删慢。 线程安全,效率低 |--LinkedList...
2020-08-18 18:01:02
157
原创 JAVA Set集合特点
(1)Set集合的特点 无序,唯一 (2)HashSet集合(掌握) A:底层数据结构是哈希表(是一个元素为链表的数组) B:哈希表底层依赖两个方法:hashCode()和equals() 执行顺序: 首先比较哈希值是否相同 相同:继续执行equals()方法 返回true:元素重复了,不添加 ...
2020-08-18 17:58:21
399
原创 JAVA TreeSet集合保证元素排序和唯一性
* TreeSet:能够对元素按照左小右大等不管规则进行排序。TreeSet是一个二叉树结构(红黑树是一个平衡二叉树)。* 排序有两种方式* A:自然排序* B:比较器排序** TreeSet集合的特点:排序和唯一* TreeSet集合保证元素排序和唯一性的原理* 唯一性:是根据比较的返回是否是0来决定。* 排序:* A:自然排序(元素具备比较性)* 让元素所属的类实现自然排序接口 Comparable* ...
2020-08-18 17:40:35
705
原创 JAVA HashSet的内容的唯一性
1. 通过具体的例子来说明:public class HashSetDemo { public static void main(String[] args) { // 创建集合对象 HashSet<String> hs = new HashSet<String>(); // 创建并添加元素 hs.add("hello"); hs.add("world"); hs.add("java"); hs.add("world"); // 遍历...
2020-08-18 15:28:43
199
原创 JAVA ConcurrentModificationException
import java.util.ArrayList;import java.util.Iterator;import java.util.List;import java.util.ListIterator;/* * 问题? * 我有一个集合,如下,请问,我想判断里面有没有"world"这个元素,如果有,我就添加一个"javaee"元素,请写代码实现。 * * ConcurrentModificationException:当方法检测到对象的并发修改,但不允许这种修改时,抛出此异.
2020-08-16 22:32:13
101
原创 JAVA 类与修饰符
/* 修饰符: 权限修饰符:private,默认的,protected,public 状态修饰符:static,final 抽象修饰符:abstract 类: 权限修饰符:默认修饰符,public 状态修饰符:final 抽象修饰符:abstract 用的最多的就是:public 成员变量: 权限修饰符:private,默认的,protected,public 状态修饰符:static,final 用的最多的就是:private .
2020-08-12 09:11:00
594
原创 JAVA 权限修饰符
public protected 默认 private 同一类 √ √ √ √ 同一包下子类、其他类 √ √ √ 不同包子类 √ √ 不同包其他类 √
2020-08-12 08:55:27
109
原创 JAVA 抽象类和接口的区别
抽象类和接口的区别:A:成员区别 抽象类: 成员变量:可以变量,也可以常量 构造方法:有 成员方法:可以抽象,也可以非抽象 接口: 成员变量:只可以常量 构造方法:无 成员方法:只可以抽象B:关系区别 类与类 继承,单继承 类与接口 实现,单实现,多实现 接口与接口 继承,单继承,多继承C:设计理念区...
2020-08-11 12:05:49
93
原创 JAVA final关键字
final关键字是最终的意思,可以修饰类,成员变量,成员方法。修饰类,类不能被继承 修饰变量,变量就变成了常量,只能被赋值一次 修饰方法,方法不能被重写final修饰局部变量在方法内部,该变量不可以被改变 在方法声明上,分别演示基本类型和引用类型作为参数的情况基本类型,是值不能被改变 引用类型,是地址值不能被改变final修饰变量的初始化时机在对象构造完毕前即可...
2020-08-09 23:20:04
80
原创 JAVA static关键字
(1)静态的意思。可以修饰成员变量和成员方法。 (2)静态的特点: A:随着类的加载而加载 B:优先与对象存在 C:被类的所有对象共享 这其实也是我们判断该不该使用静态的依据。 举例:饮水机和水杯的问题思考 D:可以通过类名调用 既可以通过对象名调用,也可以通过类名调用,建议通过类名调用。 (3)静态的内存图 静态的内容在方法区...
2020-08-08 20:50:46
230
原创 JAVA 类的初始化过程
Student s = new Student();在内存中做了哪些事情?加载Student.class文件进内存 在栈内存为s开辟空间 在堆内存为学生对象开辟空间 对学生对象的成员变量进行默认初始化 对学生对象的成员变量进行显示初始化 通过构造方法对学生对象的成员变量赋值 学生对象初始化完毕,把对象地址赋值给s变量...
2020-08-08 18:06:26
158
Android AnimationDemo_DrawableAnimation帧动画
2017-11-12
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人