自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

大圣代的技术专栏

Android 高手核心知识点笔记(不断更新中????) https://github.com/daishengda2018/AndroidKnowledgeSystem

  • 博客(62)
  • 资源 (2)
  • 收藏
  • 关注

原创 「抄底 Android 内存优化 9」 —手撕 LeakCanary 核心原理

LeakCanary 核心源码解读 + 心得体会

2023-02-04 23:51:56 636

原创 「抄底 Android 内存优化 4」 — 图解 mmap 原理

前面我们学习了分配虚拟内存的两种系统调用:brk 和 mmap 。brk 就很好理解了,直接移动指针即可。但是对 mmap 却还是云里雾里不是很理解。这里就单独学习一下 mmap 的基本原理以及在 Android 系统中的应用。在 Android 中 mmap 应用于堆内存划分的同时也是 Binder 机制的基石,而腾讯的高性能 IO 库 [MMKV](https://github.com/tencent/mmkv)、美团的 [Logan](https://github.com/Meituan-Dia

2020-08-25 19:45:02 1201

原创 「抄底 Android 内存优化 3」 —— JVM 内存管理

你知道 JVM 进程的内存布局吗?

2020-08-02 14:58:33 1502

原创 关于 Kotlin 静态代码检测工具 detekt 的说明

项目地址介绍detekt 是一款 kotlin 代码静态检测工具,他对标的是 Java 静态检测工具 checkStyle。detekt 有着检测快、功能强、可配置高等特点,可以帮助开发者尽早的发现代码中的坏气味。除了 detekt 还有一种成熟的方案:ktlint。 但 ktlint 的会按照内置规则修改代码,这是不可容忍的。虽然 detekt 配置起来复杂一些,但是更加灵活,可以保障团队的代码风格一致,并提前发现不良代码。另外,detekt 的规则是 ktlint 的超集可以通过一下配置添加.

2020-07-11 16:54:47 4366 2

原创 [Java 执行那些事] —— Java 是解释执行么?

在阅读文章之前,请您思考标题的内容:Java是解释执行么?

2018-08-16 11:08:06 1852 1

原创 C语言 指针的新理解

1. 指针存储的是**整型二进制数**,这个二进制数的含义是:**某个变量在内存中的地址**2. 这个二进制数的大小与计算机系统位数有关,如果是32位机器就是4字节的,如果是64位机器就是8字节的,根据机器字而决定的,用户不能控制。3. 指针自身的大小与它指向的类型无关,无非就是表示一个地址而已,地址中存放的具体数据与指针无关

2023-02-15 12:32:48 1593 2

原创 Sizeof与Strlen的区别与联系

Sizeof与Strlen的区别与联系一、sizeof sizeof(…)是运算符,在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组、指针、类型、对象、函数等。 它的功能是:获得保证能容纳实现所建立的最大对象的字节大小。 由于在编译时计算,因此sizeof不能用来返回动态分配的内存空间的大小。实际上,用sizeof来返回类型以及

2023-02-15 12:32:25 735 1

原创 [实践—网络优化] 升级 HTTP2 协议

本文基于真实项目优化过程奇怪的错误日志在 firebase 统计的日志中发现出现频率最高的问题和 Http2 连接超时有关系,但是和服务端交谈得知他们并没有开启 Http2!那么这个问题怎么来的呢?是 Okhttp 内部错误问题还是我们使用不当导致的。网络出了问题怎么办,答案只有一个:抓包!使用 WireShark 抓包看到了如下内容:在 Client Hello 的时候客户端在 ALPN 协议中声明了客户端支持的协议类型,这符合 OkHttp 的默认配置在 Server He.

2021-04-29 14:53:48 658

原创 [实践—卡顿优化] 替换 SharePreferences 为 MMKV

替换 SharePreferences 为 MMKV本文基于真实项目优化经验众所周知 SharedPreferences 有性能问题,在压力大的情况下无论是读还是写都有 ARN 的可能,最近监控返现 SharedPreferences 的问题也出现在了 togo 中,还挺严重,决心搞掉他。解决方案很明确:使用 MMKV 替换掉 SharePreferences。MMKV 项目地址:https://github.com/Tencent/MMKVSharePreference

2021-04-29 14:34:45 891

原创 [实践-内存优化] 解决 SVGAPlayer 内存问题的复盘总结

解决 SVGAPlayer 内存问题的复盘总结本文是基于真实项目优化而来,具体代码已经贡献给组织。SVGAPlayer-Android 这个库做的还是很实用的,但是存在着很严重的内存问题。为了提升项目的质量和稳定性,对其进行一些修改,并提交给组织。修复工作整体分为两步:修复内存泄漏问题。修复运行时无用资源对内存的消耗。修复内存泄漏问题发现内存泄漏的问题过程比较简单,重点是如何发现。在这次解决问题主要步骤就是使用 MMAT 工具分析内存泄漏问题,然后定位分析,解决问题。总的来说内存泄漏

2021-04-29 14:27:31 4625 7

原创 「抄底 Android 内存优化 8」 —— 快手线上 OOM 监控学习笔记

看看大厂是如何做线上内存监控的

2020-11-02 20:55:50 4190 4

原创 「抄底 Android 内存优化 7」 —— 手撕 LeakCanary 核心原理

LeakCanary 为什么要两次判定才确认是否存在内存泄漏呢?

2020-11-02 20:38:30 590

原创 「抄底 Android 内存优化 6」—— 浅析 Android 虚拟机内存管理

众所周知 Android 以 Java 、Kotlin 为编程语言,在编译时 Anrdoid 会将代码产出的字节码文件经优化后形成.dex 文件保存于 Apk 中,而 Android 中所有的应用程序都运行在 Android 虚拟机中。那么既然都已 Class 文件为原材料、以虚拟机为运行载体 Android 虚拟机与 JVM 在内存管理方法有什么差异呢?

2020-11-02 20:26:31 738

原创 「抄底 Android 内存优化 5」—— GC 回收器与内存分配策略

垃圾回收集(Garbage Collection,下文简称GC)并不是为 Java 而诞生的,在1960年诞生于麻省理工学院的 Lisp 是第一门开始使用内存动态分配和垃圾收集技术的语言。经过 60 年的发展内存自动回收技术已经逐步成熟,看似一切都已经进入了自动化的时代。那么还为什么要学习垃圾回收和内存分配策略呢?答案很简单:当需要排查各种内存溢出、内存泄漏问题时,当垃圾收集成为系统达到更高并发量的瓶颈时,我们就必须对这些“自动化”的技术实施必要的监控和调节。

2020-08-31 11:39:14 514

原创 「抄底 Android 内存优化 2」 —— Linux 内存管理

Android 系统是基于 Linux 打造的,要想学好 Android 内存相关知识,了解 Linux 是十分必要的。

2020-08-02 14:39:02 500

原创 「抄底 Android 内存优化 1」—— 虚拟内存

CPU 指令对内存的要求对于 CPU 执行指令来说有三种重要的寄存器:PC 寄存器(Program Counter Register:程序计数器),我们也称作指令地址寄存器(Instruction Address Register)。顾名思义,他就是用来存储下一条指令的地址的。指令寄存器(Instruction Register): 存储当前正在执行的指令。条件寄存器(Status Register),用里面的一个一个标记位(Flag),存放 CPU 进行算术或者逻辑计算的结果。

2020-07-23 21:21:15 2139

原创 “啥 Handler 原理你都不知道,还敢来面试……”

概述Android 的消息机制主要指的是 Handler 的运行机制,从开发者的角度来说 Handler 是 Android 消息机制的上层接口,而底层的逻辑则是由 MessageQueue、 Looper 来完成的。Handler 的设计目的是为了解决不能在 Android 主线程中做耗时操作而又只有主线程才能访问 UI 的矛盾。通过 Handler 消息机制可以让开发者在子线程中完成耗时...

2020-05-07 20:00:22 400

原创 [Android View 知识体系] View 的位置与坐标系

获取View位置的常见方法:View.getTop、View.getBotoom、View.getLeft、View.getRightView.getX、 View.getYView.getTranslationX、View.getTranslationYView.getLocationInWindow、 View.getLocationOnScreenView.getTop 等...

2019-09-29 15:19:40 281

原创 Synchronized 你真的懂吗?

文章目录概念Synchronized 大概可以分为以下几种同步块:标记实例方法:实例同步方法标记静态方法 :静态同步方法实例方法中标记代码块静态方法中标记代码块关于 Synchronized 的原理可以参见 聊聊并发(二)Java SE1.6中的Synchronized概念首先要强调的一点 Synchronized 并不是锁它只是一个关键字,他的作用是标记方法或者代码块是同步的。Sync...

2019-09-09 22:35:25 162

原创 [Android 自定义 View] —— 深入总结 onMeasure、 onLayout

onMeasure、onLayout 可以说是自定 View 的核心,但是很多开发者都没能理解其含义与作用,也不理解 onMeasure 、 xml 指定大小这二者的关系与差异,也不能区分 getMeasureWidth 与 getWidth 的本质区别又是什么。本文将通过理论加实践的方法带领大家深入理解 onMeasure 、onLayout 的定义、流程、具体使用方法与需要注意的细节。

2019-08-25 22:35:01 1058

原创 [Android 自定义 View] 自定义属性你真的理解吗?

想必很多同学都已经对于自定义属性使用的得心应手了,但是有一些细节你真的知道吗?比如 AttributeSet、TypedArray 、declare-styleable 这些类和标签的内容你都清楚吗,在获取自定义属性的时候为什么要用```javaContext.obtainStyledAttributes(AttributeSet, R.styleable.XXXX);```方法呢?所有的答案都会在这篇文章里

2019-08-12 01:00:28 366

原创 [Java 执行那些事] —— 类加载机制( 上)

代码编译的结果从本地机器码转换为字节码,是存储格式发展的一小步,却是编程语言发展的一大步。——周志明《深入理解Java虚拟机》Introduction to Class Loaders类加载(Class Loaders)是Java运行时(Java Runtime Environment 简称 JRE)的一部分,他负责动态的将字节码从文件形式加载到内存中。正是因为类加载机制的...

2018-08-27 00:16:04 5401 1

原创 【Android View事件(四)】多种花样实现 View 滑动效果

在学习Android坐标系和触控事件之后我们就可以看看系统为开发者提供了那些方法来实现滑动效果吧! 前言在前面的几篇文章,

2017-11-05 21:21:34 1618

原创 【Android View事件(三)】Scroll类源码分析与应用

在前面的几篇文章,我向大家介绍的都是单一View事件,从这篇文章开始,我将向大家介绍连续的事件 —— 滑动。滑动是移动端设备提供的重要功能,正是由于强大的滑动事件让我们小巧的屏幕可以展现无限的数据。而滑动事件冲突却常常困扰着广大开发者。孙子云:知己知彼,百战不殆。想更好的协调滑动事件,不知道其中原理的确困难重重。当你学习本篇文章之后你会发现其实Scroll很简单,你只是被各种文章与图书弄糊涂了。

2017-11-05 21:00:19 908

原创 《Android开发者必备知识体系 》写作计划

从2017年8月份开始,我将围绕「Android进阶」这个核心话题发表一系列文章,从点到面的详细梳理其中知识,从而达到查缺补漏,开拓视野的目的。如果能对你有帮助,这是我莫大的荣幸。写这个体系的原因自大学接触Android以来,在这个领域里面混迹也有了一段时间,逐步对Android有了更深层次的认知。但是得心应手日常工作的同时却发现没有办法再度提高,陷入“无所不能”的假想中无法自拔。

2017-10-27 00:12:14 399

原创 【Android View事件(二)】详解事件分发机制

Android事件分发机制不仅仅是核心知识更是难点,这对于不少初学者甚至是中级开发者来说都会觉得困惑。另外,View的另一大难题就是滑动冲突,解决它的方法就不需要掌握事件分发机制作为理论基础,因此掌握好View的事件分发机制是十分重要的。本篇文章将以图文结合的方式,深入介绍View的事件分发机制。而后面的文章我将会详细分析View 的滑动以及滑动冲突,敬请期待。

2017-10-15 19:18:02 1091

原创 [Android View 知识体系] 必知必会 View 基础知识

在《【Android 控件架构】详解Android控件架构与常用坐标系》这篇文章中,我曾在【常用坐标系】一节中简单描述过 MotionEvent 常用方法,鉴于最近工作中大量处理了View触摸事件,特此展开讨论。1,MotionEvent对于 MotionE

2017-08-26 17:06:18 1667 1

原创 【Android View源码分析(一)】setContentView加载视图机制深度分析

在前面《【Android 控件架构】详解Android控件架构与常用坐标系》的文章中我们提到了setContentView()方法,当时只是匆匆带过,并没有阐明具体流程。而这篇文章就是从Activity中的setContentView()方法出发结合

2017-08-14 23:42:47 1613

原创 「重启」本博客Android进阶知识体系汇总

前言从2017年年中开始,我将围绕「Android进阶」这个核心话题发表一系列文章,从点到面的详细梳理其中知识,从而达到查缺补漏,开拓视野的目的。如果能对你有帮助,这是我莫大的荣幸。

2017-08-01 23:59:53 861

原创 【Android 控件架构】详解Android控件架构与常用坐标系

前言View在Android的世界中扮演着重要的角色,正是这些控件组成了一个又一个精美的App。View体系是Android界面编程的核心,虽然它不属于四大组件但是它的重要行却毫不逊色,这个系列我会陆续从View的滑动事件、View 的事件反馈、自定义View等多个方面逐步介绍Android View体系。如果能帮助到你,那是我莫大的荣幸。Android控件框架在Android的世界中View是所有

2017-08-01 22:58:45 1448

原创 【Android 性能优化】—— 详解内存优化的来龙去脉

APP内存的使用,是评价一款应用性能高低的一个重要指标。虽然现在智能手机的内存越来越大,但是一个好的应用应该将效率发挥到极致,精益求精。本文是【Android 性能优化】系列的第二篇文章,我们在第一篇【Android 性能优化】—— UI篇中主要介绍了Android界面的优化的原理以及方法,这一篇中我们将着重介绍Android的内存优化。本文的篇幅很长,但是请不要嫌烦

2017-03-19 16:43:06 12440 10

原创 【Android 性能优化】—— 打造丝滑的 UI 界面

1. 前言随着最近几年移动市场蓬勃发展,引来大批人员投入到Android、IOS的开发前线,与此同时全国各大培训机构每月都培养出成千上万名号称拥有2到3年工作经验的开发者。当然,这都已经不是什么秘密了,从目前来看,中国IT行业的主力军基本上都走过培训的道路。但问题是,这号称2~3年工作经验者,使招聘单位错误的认为:2~3年开发经验是和刚刚结束的培训经历基本上划是等号地。这就导致了企业大幅度提高用人标

2017-03-13 16:20:33 2535

原创 【Android】View事件分发思维导图

Android View事件思维导图,清晰明了,一看便懂

2017-03-09 16:57:15 931

原创 【Android】解决使用Dialog + EdiText 实现评论功能时,软键盘不协调的问题

解决使用Dialog + EdiText 实现评论功能时,软键盘不协调的问题

2017-03-08 16:29:44 1090

原创 解决Viewpager在调用notifyDataSetChanged()时,界面无刷新的问题

问题描述相信很多做过Viewpager的人肯定遇到过这个问题,这个是bug还是android就是如此设计的,我们不做讨论。总之,它确实影响我们功能的实现了。可能不少同学选择为Viewpager重新设置一遍适配器adapter,达到刷新的目的。但是这种方法在大多数情况下,是有问题的。 解决办法以我们可以尝试着修改适配器的写法,覆盖getItemPosition()方法,当调用notifyDataSe

2017-03-04 15:12:47 1198

原创 【Android进阶】浅析Android Binder机制

APP内存的使用,是评价一款应用性能高低的一个重要指标。虽然现在智能手机的内存越来越大,但是一个好的应用应该将效率发挥到极致,精益求精。本文是【Android 性能优化】系列的第二篇文章,我们在第一篇【Android 性能优化】—— UI篇中主要介绍了Android界面的优化的原理以及方法,这一篇中我们将着重介绍Android的内存优化。本文的篇幅很长,但是请不要嫌烦

2017-03-03 20:20:46 10745 1

原创 Node.js 深入浅出

本文是对于Node.js的简单介绍,读者可以通过本文对于Node.JS有一个全新的认识

2017-03-02 18:27:06 978

原创 Mac & Linux下 nvm ls-remote只显示iojs

Mac & Linux下 nvm ls-remote只显示iojs

2017-03-02 17:27:38 3268 7

转载 【Android】 toolbar左边留有空白、toolbar两端空白、toolbar两端不能填满布局问题

最近自定义Toolbar之后,发现左侧不能完全填充,总是留一点空白,经过查看新发布的V7的支持包中的style发现了解决方法

2017-02-23 10:15:00 3502 3

原创 React Native 踩坑日记

React Native 踩坑日记

2017-02-17 19:09:07 3409

【Android】View事件分发思维导图

详情见博客:http://blog.csdn.net/qq_23191031/article/details/60963217

2017-03-09

图书管理系统

用Java实现的图书管理系统 用于课程设计 连接数据库

2015-05-06

空空如也

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

TA关注的人

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