自定义博客皮肤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)
  • 资源 (1)
  • 收藏
  • 关注

原创 WindowManager

wms内容相当庞大,阅读源码不要陷入细节window:就是一个窗口,抽象的概念,实实在在显示的是view,window管理view,每个activity都有一个window,dialog、toast、输入法窗口、系统错误窗口等都是一个windowapplication window :activity 1-99sub window:子窗口,popwindow 1000-1999system window:输入法窗口 2000-2999窗口次序 application window ——》

2022-10-24 17:55:24 600

原创 安卓一些优化点

安卓端一些优化点

2022-05-01 11:00:00 274 1

原创 Android11系统之Launcher启动流程

本文的内容主要是分析安卓系统源码,可能阅读起来会有点枯燥,所以最好可以跟着源码走一遍流程,学习源码没有捷径。本文源码基于Android 11Launcher 进程即 Android 系统桌面,也是一个应用程序,作为应用程序,那么启动过程就少不了AMS(ActivityManagerService),AMS是 Android 系统中最核心的系统服务,几乎所有的APP应用都需要与AMS通信 Launcher 也不例外,本文先分析AMS启动再走到 Launcher 进程。AMS的启动过程从上篇.

2022-03-07 14:53:00 7715 2

原创 Android系统启动流程

文章目录目录前言一、引导程序BootLoader二、Linux内核启动三、init进程启动四、Zygote进程启动五、Android桌面启动总结前言Android系统是怎么启动的?用过手机的都知道长按电源键就可以了,过程可以说很简单,一台手机从按下电源键到显示品牌logo,再到进入系统桌面,整个启动流程就完成了,但这只是我们看到的现象,其背后到底经历了什么呢?本文就来分析下这看似简单的启动流程。一、引导程序BootLoader当电源键按下时引导代码会从预定义的

2022-01-13 21:30:00 3041 12

原创 Android中Binder IPC机制

Binder IPC机制,学不动也要学

2021-12-30 17:18:26 3759 22

原创 Handler消息机制(二)

Handler相关的一些面试题handler线程间如何通讯?Handler通信实现的方案实际上是内存共享的方案。ThreadLocalLoople什么时候退出?

2021-12-22 00:00:00 1829 3

原创 Handler消息机制(一)

Handler相关知识点都会了吗?

2021-12-14 17:24:29 1789

原创 Android事件分发总结

View处理事件逻辑,Viewgroup分发事件逻辑

2021-12-09 20:50:20 1424

原创 JetPack WorkManager源码分析

WorkManager的出现用来替换所有的 Android 后台任务,为后台任务提供了一套统一的解决方案,保证了api的一致性和稳定性。WorkManager 能保证任务一定会执行,即使用户导航离开屏幕、退出应用或重启设备也不影响。

2021-12-07 22:00:00 476

原创 JetPack DataBinding源码分析

DataBinding是谷歌15年推出的一个工具支持库,借助该库可以使用声明性格式将布局中的界面组件绑定到应用中的数据源。DataBinding支持双向绑定,能大大减少绑定app逻辑与layout 文件的“胶水代码”,例如setText、findViewById等代码。双向绑定,即数据发生变化时界面跟着变化,反过来界面内容变化也会同步更新到数据上。

2021-11-25 23:45:00 1645

原创 Jetpack LiveData源码分析

一、LiveData概览LiveData是一种可观察的数据持有者类。LiveData位于androidx.lifecycle包下,并具有生命周期感知能力,如感知Activity、Fragment 、Service等的生命周期。这种感知能力意味着使用时不需要手动处理生命周期,避免了内存泄漏等问题。LiveData使用了观察者模式,当数据发生变化时LiveData会通知Observer完成界面更新,也就是数据驱动UI。如果观察者的生命周期处于STARED或RESUME状态,则LiveData会认为该观察

2021-11-20 19:45:00 149

原创 Jetpack Lifecycle源码分析

一、LifecycleLifecycle是Jetpack中生命周期感知型组件,用于存储如Activity 或 Fragment的生命周期状态的信息,并允许其他对象观察此状态。Lifecycle使用状态和事件两种枚举来跟踪其关联组件的生命周期状态。二、基本使用使用Lifecycle观察整个Activity生命周期变化,只需通过Lifecycle类的addObserver方法将Lifecycle和观察器关联即可,每当 Activity 的生命周期方法被调用,DefaultLifecycleOb.

2021-11-17 21:15:00 1729

原创 Jetpack Compose(二)

Compose布局官网介绍:界面元素采用多层次结构,元素中又包含其他元素。在 Compose 中,可以通过从可组合函数中调用其他可组合函数来构建界面层次结构。添加文本 data class Message(val author: String, val body: String) @Composable fun MessageCard(msg: Message) { Column() { Text(text = msg.autho

2021-10-28 18:59:01 996

原创 Jetpack Compose (一)

声明式UI和命令式UIJetpack Compose 是用于构建原生 Android 界面的新工具包,稳定版目前更新到1.0版本,它基于声明式的编程模型,与传统xml命令式UI相比可以增加开发效率,使用更少的代码实现更多的功能,不用花费时间在颜色、动画、大小变化等界面状态维护的事情上。运行环境Jetpack Compose 是基于kotlin语言开发的框架,不支持Java。Android Studio需要4.0及以上版本,在4.0时添加了对Jetpack Compose 的支持,如新的Co...

2021-10-27 17:38:54 1517 4

原创 设置Activity在动画过程中渲染页面

通过研究系统源码可以知道,在系统版本大于等于 4.3,小于等于 6.0 之间,ViewRootImpl 在处理 View 绘制的时候,会通过一个布尔变量 mDrawDuringWindowsAnimating 来控制 Window 在执行动画的过程中是否允许进行绘制,该字段默认为 false,我们可以利用反射的方式去手动修改这个属性,提升加载速度/** * 让 activity transition 动画过程中可以正常渲染页面 */fun setDrawDuringWindowsAnimatin

2021-10-13 16:54:30 247

原创 Android虚拟机

1.JVM与DalvikAndroid应用程序运行在Dalvik/ART虚拟机,并且每一个应用程序对应有一个单独的Dalvik虚拟机实例。Dalvik虚拟机实则也算是一个Java虚拟机,只不过它执行的不是class文件,而是dex文件。Dalvik虚拟机的指令集是基于寄存器的,Java虚拟机的指令集是基于堆栈的。两者都是解释执行。基于栈的虚拟机栈是内存中的一块连续的存储空间,访问速度比寄存器要慢,每一个运行时的线程,都有一个独立的栈。栈中记录了方法调用的历史,每有一次方法调用,栈中便会多一个栈桢

2021-09-29 15:47:08 545

原创 Mac Android studio, adb start-server‘ failed -- run manually if necessary

记录下Android studio连接不上手机的问题不知是又抽风了还是咋地,打开AS后出现ADB Connection Error,底部疯狂弹adb错误信息。首先尝试重启adb重启AS重启电脑,adb start-server 和adb kill-server直接报错,重启大法行不通;接着看错误信息以为ADB的5037被占用了,用 sudo lsof -i tcp:5037 查看5037端口进程,发现只有AS并没有其他进程,所以确定不是端口被占用;还是不行,升级AS,从4.1到Arct.

2021-09-27 15:35:24 561 1

原创 理解JVM中对象与垃圾回收机制

虚拟机中对象的创建过程一般的内存分配, 内存区域规整的话使用指针碰撞,不规整使用空闲列表,还要考虑并发安全问题空间初始化:设为零值 int=0,boolean=false设置:对象初始化:调构造方法对象的内存布局:对象的访问定位句柄相当于一个中转站,从对象引用指向对象实例,类似二次映射直接指针:Object o = new Object() o就是直接指针,hotspot基本使用直接指针判断对象存活1.引用计数法,存在对象相互引...

2021-08-04 18:35:54 259

原创 理解JVM运行时数据区

jvm的运行过程class -->jvm -->机器码运行时数据区域Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域程序计数器 唯一不会OOM,时间片轮转机制,记录上次执行到的字节码地址,下次继续往下执行java虚拟机栈 一种后进先出的数据结构,存储当前线程运行方法所需的数据,指令、返回地址 ,包含栈帧(局部变量(8大基础数据类型+引用)、操作数栈、动态连接、完成出口(返回地址)),大小限制 -Xss:设置线程栈大小...

2021-07-28 15:37:12 161

原创 序列化与反序列化

序列化 将数据结构或对象转换成二进制串的过程。主要用于网络传输,数据持久化,一般序列化也称为编码(Encode)。反序列化 将在序列化过程中所生成的二进制串转换成数据结构或者对象的过程。主要用于从网络,磁盘上读取字节数组还原成原始对象,一般反序列化也称为解码 (Decode)。几种常见的序列化和反序列化协议XML&SOAP XML 是一种常用的序列化和反序列化协议,具有跨机器,跨语言等优点,SOAP(Simple Object Access protocol) 是一

2021-07-08 21:00:36 178

原创 Synchronized关键字原理和底层优化

synchronized是java中的一个关键字,由jvm提供的一种重量级的同步锁,按锁的不同状态synchronized属于悲观锁、非公平锁、可重入锁。synchronized

2021-07-02 11:46:30 245

原创 Java中的AQS基本原理

AQS即AbstractQueuedSynchronizer缩写,翻译为抽象队列同步器,平时使用较多的ReentrantLock就是基于AQS实现。

2021-06-09 17:58:52 610 1

原创 Java中CAS基本原理

java在1.5之前都是靠synchronized关键字保证同步,synchronized保证了无论哪个线程持有共享变量的锁,都会采用独占的方式来访问这些变量。这种情况下:1.在多线程竞争下,加锁、释放锁会导致较多的上下文切换和调度延时,引起性能问题2.如果一个线程持有锁,其他的线程就都会挂起,等待持有锁的线程释放锁。3.如果一个优先级高的线程等待一个优先级低的线程释放锁,会导致优先级倒置,引起性能风险。对比于悲观锁的这些问题,另一个更加有效的锁就是乐观锁。 乐观锁就是:每次不加锁而是假设没

2021-05-28 16:43:17 231

原创 Java高级特性之注解与反射

注解注解在开发中的作用不言而喻,目前比较流行的开源框架基本都用到了注解,本文结合Retrofit框架的注解来学习和总结。annotation注解Java 注解(Annotation)又称 Java 标注,是 JDK5.0 引入的一种注释机制。 注解是元数据的一种形式,提供有关于程序但不属于程序本身的数据,不会影响代码的实际逻辑,仅仅起到辅助性的作用。内置注解比较常见的内置注解:@Override此注解只适用于修饰方法,主要用于在子类中覆盖父类中的方法@Deprecated此注..

2021-05-24 17:21:59 134

原创 Java高级特性之泛型

1.为什么需要使用泛型?先来看一段代码 public int addInt(int x, int y) { return x + y; } public float addFloat(float x, float y) { return x + y; }可以看到实现一个简单的加法需求,需要对int和float类型分别处理,这时候想要实现double类型求和,就得重新再写一个double类型的方法。定义了一个List类.

2021-05-14 19:04:51 115

原创 Linux学习之Shell脚本(二)

一.vim的三种工作模式1.命令模式打开文件首先进入命令模式,是使用vim编辑器的入口。在命令模式下,通过使用命令对文件进行常规的编辑操作,例如:复制、粘贴、删除、定位、翻页 等等。在这个模式下,键盘输入a、A、i、I、s、S 其中之一进入编辑模式(英文输入法下);输入shift + : 进入末行模式;输入shift+zz 退出vim。2.末行模式在末行模式下,执行退出文件、保存并退出文件等操作。末行模式是vim编辑器的出口,要退出vim,必须要在末行模式下。在这个模式下,键

2021-05-07 19:45:13 109 2

原创 Linux学习(一)

一. CentOS VS Ubuntu所有Linux版本中,CentOS 和 Ubuntu 是使用最多的两个,它们有什么区别?CentOS 是社区支持的企业级操作系统,于 2004 年发布。在企业中使用最广泛的,它具有高度可定制性,更稳定和更安全一些,因为不经常更新。Ubuntu 基于 Debian 架构,于 2004 年发布。Ubuntu 一直是个人和专业用户的热门人选,有丰富的文档,活跃的社区和大量的在线教程,更容易为已经熟悉桌面版 Ubuntu 的初学者使用,但是Ubuntu经常更新,相对

2021-04-26 11:40:08 818 6

安卓一行代码切换网络框架

安卓一行代码切换网络框架

2021-11-10

空空如也

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

TA关注的人

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