18年5件事FLAG 今年年中写的,现在放出来,等年底看看做成了那几件~~让人觉得很莫名其妙的五件事。 但是又是不得不做的五件事。编程作为一个IT从业者,android开发人员,其实我真的不会编程,很可笑吧,事实却真的如此。程序 = 算法+数据结构算法,让性能得到提升,数据结构,让程序不再臃肿。更加的高内聚,低耦合。使编程更像一种艺术,充满了美感。现在的我最多的是搬运工,组件的嵌套,逻辑...
Android Studio + MAT 内存泄露分析 前提 ThirdActivity 已经关闭,回到了MainAcitivity。应该是只有回到了MainAcitivity的。通过 Profiler 看到还有 ThirdActivity,那就是它有内存泄露。image1、首先利用 Profiler GC 打点,下载 hpof。当然也可以在Profiler中查看Activity是否有泄露,但...
Android 编译打包的那些疑问 我们平时都是用 AS 进行打包,这就造成了很多盲点,我们就来看看究竟是咋回事,提前声明这篇文章讲的不全,只讲一些疑惑盲点,需要全面学习的,看老罗的吧,详细的令人发指。我们从结果入手,看看打包完毕的apk里面是啥模样,把.apk 修改成 .zip 解压缩。按图索骥哈哈。image一共五个文件,第一个 AndroidManifest.xml ...
不得不学之「 Gradle」 ⑥ 自定义 plugin 学习完毕 Gradle 的基础知识,不来点实战,感觉就像没有学习过啊。那我们就搞一搞实战,一共两个简单的操作。第一,写一个自定义 Plugin。第二,写一个自定义 Transform。自定义 Plugin网上一般都会说三种方法是去创建,咱们就不来那么多虚的,来个一劳永逸的吧,我们直接新建一个工程来写,这个会了,新建 Library 工程 和在 buil...
不得不学之「 Gradle」 ④ Gradle 任务 一、多种创建方式任务这个那么多,其实我们平时用的最多还是闭包的形式。记得太多容易混,别的看到能分别出来这个是创建就可以了。二、多种方式访问任务task 和 taskstasks 其实就是一个数组,根据 task 的名字可以查到。没啥意思。就是方便。用到在深究。tasks['task1']三、分组和描述符group 分类 分组都可以descr...
不得不学之「 Gradle」 ⑤ Gradle 插件 一、插件的作用首先学习这个之前,明确一下,啥是插件?插件的定位是开发实现原纯净系统平台、应用软件平台不具备的功能的程序。打个比方吧,本来卖房,是售楼处和客户的关系,但是有了中介和两者对接,这个中介就是售楼处的插件,符合不同售楼处的规定,提供售楼处没有的功能,比如树一个小黑板,写上 xxx楼xx钱。密密麻麻的。二、插件的作用插件分为两种:应用二...
不得不学之「 Gradle」 ③ 构建脚本基础 其实学到这里,对于 AndroidStudio 里的 Gradle 还是不懂, 好多东西见过 ,可是 不知道具体是干啥的,所以学好基础,到后面再看 Android Gradle 就很简 单了 。我 们接着学习基础。带着疑问去学习。什么是 Settings 文件?什么是 Build 文件?什么是 Project?什么是 Task?我们在 ...
不得不学之「 Gradle」 ② Groovy 进过上一篇 入门篇 之后,我们正式开始学 Groovy。我们这些使用 Java 语言的,学习 Groovy 基本没有难度,不过需要注意一些特性,比如支持「闭包」、支持「DSL」。是一门非常灵活的动态脚本语言。Groovy 没有分号,别不习惯。一、集合List、Set、Map、Queue 挺熟悉吧。一般我们常用 List 和 Map 。def nu...
不得不学之「 Gradle」 ①入门 1、运行 Gradle 文件build.gradle 是 Gradle 默认的构建脚本文件,执行 Gradle 命令的时候,会默认加载当前目录下的 build.gradle 加载脚本文件。当然我们也可以通过 -b 来指定要加载的文件。例如我们新建了一个 build.gradle 文件task hello{ doLast{ printl...
「Leakcanary 源码分析」看这一篇就够了 image.png「Leakcanary 」是我们经常用于检测内存泄漏的工具,简单的使用方式,内存泄漏的可视化,是我们开发中必备的工具之一。分析源码之前Leakcanary 大神的 github ,最好的老师。一、使用1、配置dependencies { debugImplementation 'com.squareup.lea...
「ButterKnife 源码分析」看这一篇就够了! 「ButterKnife」是 Android 系统的 View 注入框架,极大的便利了我们的开发,对应用的性能基本没有影响,是我们开发中一把尖锐的匕首。<br /><br /><br />-- Mr.S分析源码之前ButterKnife 大神的 github ,最好的老师。一、使用使用的版本是 8....
EventBus 源码分析 EventBus 源码分析分析源码之前EventBus 大神的 github,最好的老师。一、使用我们在平时都会运用 EventBus 去简化各个组件之间的通信,相信使用了它之后感觉是真的方便了不少,可以有效的对解耦发送方和接收方。无论主线程中调用子线程的方法,还是子线程中调用主线程的方法,我们不必去写繁杂的 Handler ,也省去了内存泄漏等...
View 的事件分发 原理和源码分析 很多人都是学了忘,忘了学,感觉永远也记不住。View 事件分发到底应该怎么学?其实很简单:1、敲代码2、学习原理3、画流程图View 事件分发 其实就4️部分组成1、 dispatchTouchEvent(MotionEvent ev)2、 onInterceptTouchEvent(MotionEvent ev)3、 onTouchEve...
JVM 之 类加载 Java 虚拟机将字节流转化为 Java 类的过程,可以分为三大步骤。1、加载查找字节流,并且据此创建类的过程。将类的.class 文件中的二进制数据读到内存中,将其放在运行时数据区域的方法区里,然后在堆区创建一个 java.lang.Class 对象,用来封装类在方法区内的数据结构。类的加载的最终产品位于堆中的 Class 对象,Class 对象封...
JVM 之 对象的创建 往往越熟悉的其实越陌生我们刚开始学 Java 的时候,就开始用这个 new 命令。一天八百遍的 new 却不知道它默默的为我们付出了什么。所以我们就从 JVM 的角度去看 Java 对象是如何创建出来的。首先说明一下流程,方便下面的理解NO.1 - new当程序计数器 PC 遇到这个 new 指令的时候,首先要做的是去 方法区...
JVM 之 运行时数据区域 学习JVM,首先我们需要了解 JVM 运行时数据区域。我们根据下面两张图,简单的了解一下。运行时数据区域组成部分:方法区 (Method Area)虚拟机栈 (VM Stack)本地方法栈 (Native Method Stack)堆 (Heap)程序计数器 (Program Counter Register)...
Android 面向切面编程(AOP) 概念:AOP: Aspect Oriented Programming 面向切面编程。AOP是个概念,AspectJ 是它的一个具体实现。和Java配合使用。AspectJ:核心是他的编译器(ajc),就做了一件事,讲 AspectJ 的代码在编译期插入到目标程序中。运行时没啥区别。ajc 会构建目标程序和AspectJ 代码的联系,在编译期将 As...
Android 面向切面编程(AOP) 概念:AOP: Aspect Oriented Programming 面向切面编程。AOP是个概念,AspectJ 是它的一个具体实现。和Java配合使用。AspectJ:核心是他的编译器(ajc),就做了一件事,讲 AspectJ 的代码在编译期插入到目标程序中。运行时没啥区别。ajc 会构建目标程序和AspectJ 代码的联系,在编译期将 As...
Android全埋点 什么是全埋点?也叫做无埋点,预先收集用户的所有行为数据,然后根据实际需求,从中提取行为数据。采集数据的点:$AppStart 冷启动➕热启动$AppEnd 正常退出➕进入后台➕崩溃➕强杀等$AppViewScreen 切换Activity$AppClick (重点➕难点)控件的点击事件本质原理自动拦截 =>Android对Vi...
Android里的View滑动 我们平时会经常遇到View的滑动,不管自定义View,还是动画,都需要这个东西,但是往往最熟悉的最陌生。View滑动可以分为三大类1、自身的ScrollTo和ScrollBy2、通过动画给View平移效果3、改变View的LayoutParams进行修改View的位置很传统的三大分类。但是我们要思考为什么要分出这三类,各自的实现意义。一、Sc...