自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Lock实现原理

这个鬼AbstractQueuedSynchronizer(简称AQS),最后这个鬼,又是继承于AbstractOwnableSynchronizer(AOS),AOS主要是保存获取当前锁的线程对象,代码不多不再展开。FairSync 与 NonfairSync的区别在于,是不是保证获取锁的公平性,因为默认是NonfairSync,我们以这个为例了解其背后的原理。在这里,我会用尽可能少的代码,尽可能轻松的文字,尽可能多的图来看看lock的原理。看到这里的同学,是不是有种热泪盈眶的感觉,这尼玛,不就是。

2024-06-18 15:00:00 671

原创 synchronized详解

对象头的最后两位存储了锁的标志位,01是初始状态,未加锁,其对象头里存储的是对象本身的哈希码,随着锁级别的不同,对象头里会存储不同的内容。对象头:Java对象头一般占有2个机器码(在32位虚拟机中,1个机器码等于4字节,也就是32bit,在64位虚拟机中,1个机器码是8个字节,也就是64bit),但是如果对象是数组类型,则需要3个机器码,因为JVM虚拟机可以通过Java对象的元数据信息确定Java对象的大小,但是无法从数组的元数据来确认数组的大小,所以用一块来记录数组长度。

2024-06-18 11:45:00 1261

原创 java-----synchronized和Lock的区别

Lock接口的提出就是为了完善synchronized得不完美,变成了jdk层面实现的接口,可以人工灵活的对共享资源变量的操作和控制,无论读还是写的操作。synchronized是非中断锁(必须等待线程执行完成释放锁)、不可判断(判断是否有锁),非公平(等待的时间不一样)。Lock是可中断锁(可以手动中断)、可判断(判断是否有锁),公平(两者皆可)。c) 锁的释放是由虚拟机内部进行操作,不可进行人工操作干预,既有优点,又有缺点。Lock异常时不会自动释放锁,必须手动在finally中释放锁。

2024-06-18 09:15:00 383

原创 Android Automotive之Car API

这个Demo APP只有一个Activity,如下:@Override@Override。

2024-06-17 21:30:00 1040

原创 onSaveInstanceState()什么时候会被调用呢?

概括的讲,onSaveInstanceState 这个方法会在activity 将要被kill之前被调用以保存每个实例的状态,以保证在将来的某个时刻回来时可以恢复到原来的状态,但和activity 的生命周期方法onStop 和 onPause 不一样,与两者并没有绝对的先后调用顺序,或者说并非所有场景都会调用onSaveInstanceState 方法。那么onSaveInstanceState 方法何时会被调用呢,或者这么问,什么时候activity 会被系统kill 掉呢?

2024-06-17 18:45:00 479

原创 一次Binder通信最大可以传输多大的数据?

在前面的文章中,我通过匿名共享内存的方式解决Binder通信是无法传递大数据的问题,一次Binder通信最大可以传输是1MB-8KB(PS:8k是两个pagesize,一个pagesize是申请物理内存的最小单元)

2024-06-15 20:00:00 1940

原创 Android性能优化-GPU过度绘制及优化

过度绘制就是在绘制界面时,对同一个像素重复绘制了多次,但是用户能够看到的也只有最顶层绘制的内容,GPU过度绘制或多或少对性能有些影响。如何查看是否过度绘制:设置-开发者选项-调试GPU过度绘制-显示过度绘制区域(过度渲染等,不同机器可能不同)然后就可以看看你的应用是否存在过度绘制的情况了。那么如何判断界面是否存在过度绘制呢?开启后,点击我们的应用,可以看到各种颜色的区域,其中:最理想的是蓝色,一个像素只绘制一次,合格的页面绘制是白色、蓝色为主,绿色以上区域不能超过整个的三分之一,颜色越浅越好。

2024-06-14 20:00:00 767

原创 Perfetto D3

三、SurfaceFlinger讲解SurfaceFlinger 的主要功能是接收缓冲区,创建缓冲区,并将缓冲区发送到显示器。WindowManager 为 SurfaceFlinger 提供了缓冲区和窗口元数据,SurfaceFlinger 使用这些缓冲区和窗口元数据来组合具有显示的表面。详细定义可以看官网: SurfaceFlinger 的定义在Perfetto中,我们关注的重点就是上面这幅图对应的部分App 部分BufferQueue 部分SurfaceFlinger 部分。

2024-05-24 20:13:40 1000 1

原创 java学习引用类型之弱引用

一旦对象不再被强引用引用,弱引用就会失效并被垃圾回收器回收。弱引用对象的生命周期更短暂,当垃圾回收器进行垃圾回收时,如果一个对象只被弱引用引用,那么该对象会被回收。此外,弱引用对象对垃圾回收器来说是不可达的,因此不能仅依靠弱引用来保持对象的正常使用,还需要至少一个强引用来保持对象的可用状态。需要注意的是,由于弱引用对象的生命周期短暂,因此在程序中使用弱引用时要小心,确保适当地处理弱引用返回的。需要注意的是,由于弱引用的特性,我们需要在使用弱引用的过程中小心处理返回的。,解除了对该对象的强引用。

2024-05-09 22:00:00 435 1

原创 platform-tools下找不到systrace文件夹

谷歌官方在22年3月发布的33.0.1版本的platform-tools包中移除了systrace,而最后一个含有systrace的platform-tools版本是33.0.0,因此使用<=33.0.0版本的platform-tools即可。链接:https://www.jianshu.com/p/626eaebaa6a8。性能分析请改用perfetto。

2024-05-09 21:30:00 1012 2

原创 scrcpy

一直使用的投屏工具,通过adb 连接到电脑投屏,支持有线和无线投屏,好工具记录并共享。android开发投屏神器。

2024-05-09 20:00:00 229 3

原创 Perfetto D2

正常情况下,硬件加速是开启的,主线程的 draw 函数并没有真正的执行 drawCall ,而是把要 draw 的内容记录到 DIsplayList 里面,同步到 RenderThread 中,一旦同步完成,主线程就可以被释放出来做其他的事情,RenderThread 则继续进行渲染工作。主线程与渲染线程同步渲染数据,同步结束后,主线程结束一帧的绘制,可以继续处理下一个 Message(如果有的话,IdleHandler 如果不为空,这时候也会触发处理),或者进入 Sleep 状态等待下一个 Vsync。

2024-04-24 09:30:18 1013 4

原创 Perfetto 学习D1

一、Perfetto基础1、Perfetto介绍Perfetto 是一个生产级的开源堆栈,用于提高性能 仪器和痕量分析。与 Systrace 不同,它提供数据源超集,可以用 protobuf 编码的二进制流形式记录任意长度的跟踪记录。可以将Perfetto理解为systrace的升级版,用在更新的平台、新图表展示更多的信息。

2024-04-22 20:02:39 905

原创 性能分析——Perfetto

周一至周五晚上 6点—晚上8点。

2024-04-18 21:30:00 429 1

原创 android 内存回收(一)JVM垃圾回收机制和算法

首先做一次标记(在FROM区域),就找到那些不被根对象引用的对象标记为垃圾,然后在FROM区域这些存活的对象内存空间复制到TO区域中,复制的过程中就会完成碎片的整理,因此也不会产生碎片,等复制完成后,可以看到FROM区域全是垃圾,所以一下子给予清空,并且之后交换FROM和TO他两的位置,即原来的TO变成了FROM,原来的FROM变成了TO,所以TO总是空闲的一块儿。所谓的整理就是避免之前标记清除时的内存碎片的问题,他就会在清除的过程中,会把可用的对象向前给他移动,这样的话让内存更为紧凑,这就是整理的过程。

2024-04-18 10:34:24 827 1

android蓝牙聊天程序

android手机上的的蓝牙聊天程序,可以多人聊天

2014-01-10

空空如也

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

TA关注的人

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