自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(27)
  • 资源 (5)
  • 收藏
  • 关注

原创 rk3399 Android 10.0调试 rtl8723ds 芯片

(1)dts配置wireless-wlan { compatible = "wlan-platdata"; rockchip,grf = <&grf>; wifi_chip_type = "rtl8723ds"; sdio_vref = <1800>; WIFI,host_wake_irq = <&gpio0 RK_PA3 GPIO_ACTIVE_HIGH>; /* GP...

2021-07-21 09:19:32 1240

原创 rk3399 Android10.1 hdmi 音频调试

{ hdmi_sound: hdmi-sound { status = "okay"; compatible = "simple-audio-card"; simple-audio-card,format = "i2s"; simple-audio-card,mclk-fs = <256>; simple-audio-card,name = "rockchip,hdmi"; simple-.

2021-07-21 09:02:11 2887

原创 Fragment核心原理(androidX版本)

Fragment 的使用

2021-06-19 09:59:50 1144

原创 Binder分析

分析Binder 我打算分成三部分,第一部分讲binder驱动,第二部分讲ServiceManager 的启动流程。第三部分讲服务(AMS)注册到ServiceManager的流程跟 Cliend通过ServiceManager获取AMS的流程(只会贴关键代码,需要看完成代码自行下载,有地址)一.Binder驱动分析mmap --- 能够让虚拟内存和指定物理内存直接联系起来1.binder_initkernel/drivers/staging/android/bind...

2021-05-18 19:52:34 698 1

原创 handler原理解析

handler是个消息管理机制 用于发送和接收消息所有的代码,都是handler中执行的,因为loop是个死循环,维持了android app运行的框架,线程间通讯只是附属的功能每个应用的启动流程Launcher--zygote-jvm-ActivityThread.main每个应用起来zygote都分配一个jvm 都有一个main方法public static void main(String[] args) { Trace.trace...

2021-04-29 16:37:24 584

原创 文件IO操作

文件转换成字节流,字节流为了加快速度(提供了缓冲区,一次性读多字节),再使用DataOutputStream使用固定的格式字符有一个 readline() ,且对于中文的区别1:如果只用FileOutputStream fileOutputStream = new FileOutputStream("d:/text.txt");不是也能输出到"d:/text.txt"吗?为什么要用其它两个呢?能起到什么作用呢?答案:Fil...

2021-04-20 16:02:59 92

原创 Rxjava2 线程切换调度源码分析(二)

先上代码Observable.create( // 自定义source new ObservableOnSubscribe<String>() { @Override public void subscribe(ObservableEmitter<String> e) throws Exception { e.onNext("

2021-04-16 11:48:26 105

原创 Rxjava2 源码分析(一)

分成两块源码来分析,第一块不带map关键字,第二块带map关键字第一块代码:Observable.create( // 自定义source new ObservableOnSubscribe<String>() { @Override public void subscribe(ObservableEmitter<String> emitter) throws

2021-04-15 14:20:40 393

原创 标准的观察者模式

1个被观察者,多个观察者,直接代码来说明// TODO 抽象层 被观察者public interface Observable { // 关注 void addObserver(Observer observer); // 取消关注 void removeObserver(Observer observer); // 被观察者发出了改变 void notifyObservers(); // 微信公众号的服务 编辑部门 发布一条消息 ..

2021-04-14 16:41:06 73

原创 Rxjava +Retrofit2

Rxjava 不加 Retrofit框架的话使用为public void rxJavaDownloadImageAction(View view) { // 起点 Observable.just(PATH) // 内部会分发 PATH Stirng // TODO 第二步 // TODO 第三步 .map(new Function<String, Bitmap>() { @Override public Bit.

2021-04-14 10:46:06 822

原创 gson原理

@JsonAdapter(UserJsonAdapter.class) 自定义解析类继承TypeAdapter<> 需要重写read跟write write是把对象写成字符串,read是把字符串写成对象几种用法: (1)调用反射的TypeAdapter 耗性能public static void test1() { //基本使用 //反射的TypeAdapter 耗性能 Gson gson = new Gs...

2021-04-12 18:13:08 450 1

原创 阻塞队列跟线程池

阻塞队列 满的时候后面数据进不去 空的时候拿不到数据有界 队列的长度是有限的,满了生产者就会被阻塞无界可以不停的往里放东西不会被阻塞允许自定义排序规则DelayQueue支持元素的延迟获取SynchronousQueue内部没有容器,生产者放东西另一端必须有消费者用take拿走LinkedTransferQueue 多了个tryTransfer方法,没等到消费者就放入容器双向的两端都可以取放线程池:...

2021-04-09 10:25:05 238

原创 activity启动流程

流程开始:上面调用冷启动,下面调用热启动上面是冷启动下面是热启动生命周期的管理都是它将Activity绑定到窗口上要去看zygote进程,binder通信,hander原理...

2021-03-29 16:36:16 90

原创 Activity view间的关系

Activity是整个UI界面的框架View是呈现给我们看到的界面activity创建出来时调用attach会new一个PhoneWindow

2021-03-29 15:01:16 146

原创 Context是什么

Context是个抽象类,实现主要在ContextImpl包括应用的主线程,app相关的一些信息资源管理器,默认主题等等ActivitymBase就是ContextImpl启动Activity需要一个栈,TASK虚拟的栈原因是dialog是一个window,是一个子window,子window必须依附到一个主window上,Application跟Service都没有UI界面不行...

2021-03-29 10:48:11 257

原创 synchronized中锁的升级过程

synchronized在操作过程中会访问操作系统,就是说java代码不能够让线程阻塞,过程依赖操作系统,所以是重量级锁一个对象最少占16个字节,要做一个填充对齐,每个对象在内存中的大小都是8的倍数开机之后代码块运行这个对象,4s以后如果这个对象只有一个线程访问,会上一个偏向锁(实际上cas的wihle循环改成if)上面那一条线如果出现了多线程访问就会出现轻量级锁(用cas来完成),轻量级锁在发现很多线程再抢这把锁,在3...

2021-03-26 15:31:35 145

原创 LOCK锁

背后原理是AQS线程1通过CAS获取到房卡,其他线程要的话要进入一个队列等待,当线程1用完之后调用,unlock,排在队列最前面的就可以拿到这个锁房卡自定义锁当前线程是null就是房卡是空闲状态就把Thread.currentThread这个值存到owner对象中,如果拿到了循环就不会进来了,拿不到就进来加到阻塞队列中等待如果是拿着锁的就直接置空,然后通过一个for循环把其他线程唤醒刚释放锁的那个线程要房卡的话又回去跑上...

2021-03-25 18:35:52 72

原创 乐观锁的实现方式-CAS(Compare and Swap)

在Java中java.util.concurrent.atomic包下面的原子变量就是使用了乐观锁的一种实现方式CAS实现。获取到内存中真实的偏移量从主内存用偏移量去拿(通过c c++),脱离了去变量副本去拿的拷贝过程,即使生效效果非常快在CAS流程CAS是乐观锁原理实现的。也是自旋锁乐观锁就是:每次不加锁而是假设没有并发冲突去操作同一变量,如果有并发冲突导致失败,则重试直至成功。public class AtomicInteger exte...

2021-03-25 11:23:07 665

原创 == 与equals的区别

str1后在常量池会产生4个对象,a,b,c,abc,str1在栈中,堆中也产生一块空间adc,这块空间通过映射表注册adc对应的位置str2直接在常量池中找,有就直接用,实际上str1,str2所指的位置一样str3会在堆中new出一块空间,直接在映射表中注册,直接定位到原来在内存中所开辟的空间...

2021-03-24 16:49:28 43

原创 并发线程中成员变量的可见性原理 volatile MESI缓存缓存一致性

通过read 把变量读到一块临时区域(操作数栈)操作数栈的东西是没有存下来的,通过load载入到变量副本,实际上是到局部变量表存下来了,再通过use命令去使用它,通过assign赋值因为数据在临时区,一个线程改变了这个值另一个线程并不会知道.加了volatile后 会增加一条总线,当数据改变之后通过store、write写回主内存过程中,总线会监听到这个值发生改变,会通知其他线程把副本中的数据删掉,要使用这个数据时重新从主内存中拿。写回主内存(堆)去了(锁住去...

2021-03-24 16:32:47 140

原创 各种单例:线程不安全跟线程安全的单例

双重检测volatile禁止指令重排序(半初始化) 内存屏障new的时候分成了4步第一步new一个对象,第二步在操作数栈里面复制一个list引用(在局部变量表的0号位置list指针),第三步new一个构造方法,第三步把局部变量表中的引用跟局部变量表中1存进去.....在堆内存中new一个object,int型没有初始化是0,在栈中生产一个引用,执行构造方法时把i改成13,引用建立关联存下来...

2021-03-24 15:40:33 69

原创 软引用各种引用什么时候回收

2021-03-24 15:00:46 203

原创 hashmap与sqarseArray对比,为什么sqarseArray性能等各方面更快,占内存也小

hashmap 长度*装载因子,当长度大于这个时要进行扩容Key是int 数组,value也是数组put的时候key通过二分查找找到数组下标,没有的话通过arraycopy往后挪一个位置性能高的原因是(1)get的时候就是二分查找,找到直接返回(2)put的时候有的话直接赋值(3)如果put的时候没找到找到DELETED直接赋值原始主要是remote方法并不是删除,而是置DELETED所以用得越多性能越高二分查...

2021-03-24 14:53:41 126

原创 hashmap ,hashtable,concurrenthashmap优化

红茶树二叉树,大小涉及到旋转等构件过程就很复杂,jdk8优化,长度大于8时才采用红黑树hashtable 跟hash比解决了多线程安全问题,就是性能低原因上图对hashtable的优化锁的是链表头...

2021-03-24 14:40:54 82

原创 android 5.1拍照后图片镜像处理

这是mtk6735平台的,可能每个平台位置不太一样,但改法基本相同status_tCamAdapter::takePicture() 这个函数里面添加//后摄拍照图片镜像if(strcmp(value,"true") == 0){if (getOpenId() == 0) {switch (transform) {case eTransform_ROT_90

2017-07-18 16:10:34 2264

原创 android 4.4拍照后图片镜像处理

此处原来为0 改为1

2017-07-18 15:34:50 613

原创 Android 4.4、5.1、6.0 屏蔽Home键

最近项目有这样的需要所以研究了一下着块的内容.....刚开始在度娘了一大堆 要么支持2.3之前的要么是...反正都是这个复制那个没么卵用的办法..我想先说明一点 想在应用上彻底屏蔽Home是不可能,要想屏蔽只能去改系统源码。好了,下面就看是怎么改的首先改第一处:源码位置在frameworks\base\services\core\java\com\android\server\wm\Win

2015-11-24 14:55:56 11189 18

binder_Android-6.0(1).rar

裁剪下来的binder部分的源码分析

2021-06-15

RxJavaDemo.zip

RxJava简单的DEMO + Retrofit

2021-04-14

TakePicture.rar

android app源码,通过悬浮框达到隐藏拍摄效果,界面很简单就两个button,一个开启拍照点击后开启线程并打开悬浮框进行拍照并保存在根目录下,悬浮框1dip基本看不到了。另一个button停止拍照。

2021-03-24

andoroid 5.1root系统

root系统文件已经修改好的,直接覆盖系统文件全编即可生成root的版本系统

2017-07-18

Android 4.4、5.1、6.0 屏蔽Home键

Android 4.4、5.1、6.0 屏蔽Home键,改动java文件

2017-07-18

空空如也

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

TA关注的人

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