- 博客(23)
- 收藏
- 关注
原创 Android 腾讯 Matrix 原理分析(四):TracePlugin 卡顿分析之丢帧展现
一、FrameTracer 类结构继承和实现FrameTracer 继承 Tracer:Tracer 是一个抽象类,定义了作为追踪器的生命周期和功能。比如表示进入存活状态的 onAlive()、死亡状态的 onDead()。Tracer 继承 LooperObserver:LooperObserver 也是一个抽象类,主要功能是接收主线程事件回调。比如主线程 Looper 处理消息前后,会回调该类的 dispatchBegin() 和 dispatchEnd()。public abstr
2021-02-07 15:28:22
1420
原创 Android 腾讯 Matrix 原理分析(三):TracePlugin 卡顿分析之帧率监听
写在前面FrameTracer 介绍…一、FrameTracer 类结构继承和实现FrameTracer 继承 Tracer:Tracer 是一个抽象类,定义了作为追踪器的生命周期和功能。比如表示进入存活状态的 onAlive()、死亡状态的 onDead()。Tracer 继承 LooperObserver:LooperObserver 也是一个抽象类,主要功能是接收主线程事件回调。比如主线程 Looper 处理消息前后,会回调该类的 dispatchBegin() 和 dispatc
2020-12-31 14:37:44
1609
2
原创 Android 腾讯 Matrix 原理分析(二):TracePlugin 卡顿分析之主线程监听
TracePlugin插件是由开发者手动创建并添加给 Martix 的,Martix init 方法会遍历插件并执行它们的 init。private Matrix(Application app, PluginListener listener, HashSet<Plugin> plugins) { this.application = app; this.pluginListener = listener; this.plugins = plugins; A
2020-12-16 15:02:48
1454
原创 Android 腾讯 Matrix 原理分析(一):Matrix 概览
写在前面近期开始 Android Framework 层的学习,然而较为庞大的 Framework 让人感觉无从下手。碰巧看到一篇文章说到腾讯的 性能监控框架 Matrix 用到了大量 Framework 相关的知识,所以试着分析下该框架的源码实现。在学习大佬们代码的同时主要关注该框架用到了哪些、是怎么使用的 Framework 的内容。文章目录写在前面一、Matrix 简介官方说明Matrix for Android二、使用 Matrix三、Matrix 结构初始化插件 PluginMatrix 构
2020-12-10 14:50:54
2603
原创 带着问题学习 Activity 启动流程
进程《Linux 内核源代码情景分析》中的 “进程四要素”:有一段程序供其运行;拥有专用的系统堆栈空间;在内核存在对应进程控制块;拥有独立的用户存储空间。运行需要代码支持,堆栈控件涉及内存的使用,此外还包含文件、CPU、信号(通信用)等信息。进程的创建进程通过 fork() 创建,父进程初始拥有很多参数和数据。创建子进程时,只需要父进程进行数据的拷贝,然后将部分数据修改为子进程特有的即可。这种复制方式效率比较高,避免了重新创建进程的消耗。Zygote 进程Zygote进程在.
2020-11-26 14:43:16
149
原创 Java 线程:创建、属性以及状态控制
前言本文将对 Java 线程 Thread 进行学习和总结,以下是概览:文章目录前言一、Thread 创建1.1 实现 Runnable1.2 继承 Thread二、部分属性2.1 lock 锁对象阻塞解除阻塞2.2 其它参数三、Thread 状态3.1 线程的几种状态3.2 线程状态控制线程调度守护线程线程分组四、Thread 其它4.1 线程同步4.2 终止线程总结一、Thread 创建线程的创建主要依靠实现 Runnable 接口。调用 start() 方法使线程进入就绪状态,等待 CPU
2020-11-12 16:57:50
515
2
原创 Java 高级:反射知识总结
背景要理解反射,首先要知道它产生的背景。在 Java 中,正常情况下我们只需要 new 某个类来使用就行了,但是如果想在运行时灵活创建某个类怎么办?想要使用某个类但是并没有被 JVM 加载怎么办?答案就是利用 反射,这个机制可以帮助我们在运行期需要的时候去加载创建某个类,从而使用该类的方法。使用...
2020-11-06 18:00:44
461
原创 Java 数据结构:Iterator 需要注意的点
文章目录前言一、前世今生二、一致性1. 强一致性2. 弱一致性三、迭代器种类1. 线性迭代器2. 链式迭代器 HashIterator四、总结和其它Iterable 接口实例注意总结前言Iterator 是 Java 数据结构框架的起始,它是一个顶级接口,梦开始的地方。让这个迭代器作为顶级接口可能是出于功能的考虑,不管怎样的数据结构,都需要遍历不是。那么就需要提供一种可以用来遍历的方式,让开发者使用也让 JVM 认识。一、前世今生JDK 1.0 的 Enumeration,因名字太长和方法数
2020-11-03 10:01:06
465
原创 Java 数据结构:LinkedList 读源码笔记
LinkedList特点有序,但内存空间中可能比较分散;存储相对较快、获取相对较慢;线程不安全。LinkedList 继承/实现继承 AbstractSequentialList:线性序列结构的抽象,继承于 AbstractList;抽象方法 listIterator(),子类必须实现此方法用于创建迭代器;内部封装使用该迭代器实现的 add()、set()、remove()等方法。public abstract ListIterator<E> listIterator
2020-10-30 17:55:48
457
2
原创 ArrayList:读源码笔记
ArrayList 实现或继承的类或接口:List 接口定义线性集合的抽象,定义了获取容量size()、是否为空isEmpty()、是否包含某元素contains(Object o)、添加add() 和 remove() 等方法。特点有序:存储和取出的按照顺序;有索引:包含一些带索引的方法;允许存储重复元素。AbstractList 抽象类定义线性表的进一步抽象,List 接口的骨干实现。从而最大限度地减少了实现由“随机访问”数据存储(如数组)支持的接口所需的工作。Ar.
2020-10-28 11:15:48
122
原创 ConcurrentHashMap 两个版本读源码笔记
JDK 1.7数据结构依旧是数组+链表,Segment 是一个 ReentrantLock 可重入锁:static final class Segment<K,V> extends ReentrantLock implements Serializable数据操作的时候,先定位到 Segment 数组的位置,然后尝试获取锁。某个线程获取锁成功就进行数据添加、移除等操作,这时其它线程需要操作数据,会进入 Segment 的锁队列(AQS)。等待独占线程释放锁后,后面的线程接着进行数据操
2020-10-24 10:27:25
313
原创 HashMap 灵魂拷问:从源码找寻答案
HashMap 基本概念键不可重复(可为 null),值可重复。如果键重复了,就无法定义值了。原理:Set 存 keykeyValue 键值对键值对合起来组成 Entry数组维护这些键值对 Object[entry<K,V>]键值对是链表实现模型HashCode 索引HashMap putHashMap...
2020-10-12 13:24:12
336
原创 Java String:再学字符串
定义Java 中字符串,用来定义一串字符。public final class String implements java.io.Serializable, Comparable<String>, CharSequence { /** The value is used for character storage. */ private final char value[]; /** Cache the hash code for the string *
2020-09-30 11:39:33
186
1
原创 ClassLoader:Java Android 总结
Java 中的 ClassLoaderBootstrap ClassLoader 引导类加载器作用:加载 Java 系统类,如 java.lang.*、java.uti.*等。JVM 的启动也是由它创建的初始类来完成的。特点:C/C++ 实现;不继承于 java.lang.ClassLoader。Extensions ClassLoader 扩展类加载器作用:加载 Java 扩展类,比如 swing 系列(图形化)、内置的 js 引擎、xml 解析器等等。AppClassLoad
2020-09-22 15:21:55
410
原创 JVM:这次一定要搞懂字节码
一、启动前的准备我们知道 Java 虚拟机加载的是 class 文件、但不限于 class 文件,只要是能够被虚拟机识别并正常执行的二进制字节流就可以。JVM 实现加载二进制字节流的方式有很多,限于篇幅本文只记录虚拟机加载 class 文件的情况。1.1 JVM 运行环境Java 程序之所以能够跨平台运行,要归功于 Java 虚拟机。在不同平台有自己的 Java 虚拟机实现,无论怎么实现,都需要能够执行 Java 相关文件。1.2 Class 文件定义Class 文件是一组以 8 位字节为
2020-09-15 14:31:41
1055
原创 JVM:基础回顾
一、Java1.1 Java 技术体系包含什么?Java 技术体系包含Java 程序设计语言、Java 虚拟机、Class 文件格式和Java API 类库;Java 程序设计语言:也就是 Java 语言,包括各种定义、规范等;Java 虚拟机:各种硬件平台上的虚拟机;Class 文件格式:简单的说就是把 Java 代码转换为二进制、格式为 .class 的文件,方便在各个平台被虚拟机读取;Java API 类库:Java 提供的 API,方便开发者日常使用。比如日历 Calendar,数学
2020-09-02 17:59:54
176
原创 谈谈你对注解的理解
前言刚写了一篇有关 CoordinatorLayout 和 AppBarLayout 的文章,里面有提到过 AppBarLayout 的 Behavior 是通过注解实现的,本文就通过这个过程来简单分析下注解以及使用。一、注解简述(Annotation )1.1 定义什么是注解?Java 1.5 开始引入的一种标注,相当于给代码打一个 tag、作一个标记。1.2 作用有什么用?编译期:让编译器 / APT(Annotation Processing Tool)根据注解的定义,去执..
2020-08-25 14:57:26
780
原创 Android 项目优化笔记(五):实现一个 MD 风格详情页
一、回顾前文索引:Android 项目优化笔记(一):概览1.1 色彩首先来回顾下之前的问题,项目原来的 UI:经过一番改造之后变成了这样:可以看到列表好看了许多,重要的是各种订单状态有了不同 颜色 作为指示,不同的色彩能带给用户最直观的感受。绿色:已中标订单黄色:待中标订单红色:已取消订单列表点击跳转到详情,这些颜色就可以很好的利用起来。1.2 图标可以看到每条数据右上角都有一个代表当前订单状态的小 Chips,而跳转到详情页时,必定也会有类似的文字或图标表示当前订
2020-08-17 09:35:48
651
原创 Android 项目优化笔记(四):列表
####一、列表优化问题先来看一下 app 原来的列表效果:之前发现的问题已经优化建议有:使用 TabLayout + ViewPager 使该页面可左右滑动;item 控件间距不规范,视觉效果不好;使用 CardView。#####1.1 TabLayout + ViewPager这个没什么好说的,给新司机的一点小建议:Fragment 的复用。创建 ViewPager 时...
2019-10-29 11:24:04
317
原创 Android 项目优化笔记(三):首页
###一、首页优化问题那么首先回顾一下有关首页的优化建议:角色切换方式 可以优化,如果更换的话可能需要 重新设计,且涉及逻辑较多,暂不更改。用户登录时 提示用户选择角色。(Maybe)角色切换可添加动画,用户操作时从左上角动画延伸至整个首页。Reveal Effect (揭露效果)。MD 风格:头部 CoordinatorLayout + AppBarLayout + Toolbar,...
2019-10-29 11:23:30
293
原创 Android 项目优化笔记(二):登录页
###一、回顾写在前面:距离上次更新已经有将近两个月了,一是因为工作有些忙,二是本以为类似这种感觉像是追求 UI 的方向大家可能不太感兴趣…但是经过一段时间之后发现上篇文章已获得四十多个小心心,啊这是催我更新呐。这次文章出来以后我会根据受关注情况来决定后面的坑是填或不填…顺带一提,上文说要跟领导汇报那些优化点,没想到还没等到汇报需求就改了:把登录页直接砍掉全部用短信登录。-_-|| 但...
2019-10-29 11:22:58
302
原创 Android 项目优化笔记(一):概览
更新啦:Android 项目优化笔记(二):登录页Android 项目优化笔记(三):首页Android 项目优化笔记(四):列表**声明:**不是产品也不是设计师,以下有关项目改造的内容是集合了同事和自己的一些想法和建议。本文目前基本不包含技术干货,在项目优化申请通过后会添加不涉及公司项目的示例代码片段。###一、项目改造前项目改造背景界面不好看(不涉及UI设计),缺...
2019-10-29 11:22:06
327
原创 iOS基础教程:记录从零开始到APP发布过程
写在前面本来是做 Android 开发、兼职 Unity 开发,公司有业务需求要做 iOS,还好需求比较简单:做一个 WebView + AR 的 App。WebView 感觉比较简单,AR 的话就用 EasyAR 吧,免费无水印值得推荐。但是。。。做完后要改需求,原因是有人告知**单纯的 WebView App 发布的时候审核不会通过。**为了不蹚浑水还是直接重做吧:首页是一个全屏 Ba...
2019-10-29 11:19:57
962
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人