性能优化工具(一):TraceView

0x0001 TraceView 是什么?

一个图形化的工具, 用来 展示和分析方法的执行时间.

在发现某个页面或者操作会卡顿时,可以使用 TraceView 定位问题代码,
比如启动,加载图片列表卡顿等情况。

用途:检测卡顿(通过查看方法执行的时间来发现卡顿原因,以此进行解决)。

Read More

Java 多线程五:线程池

为什么使用线程池

有了 Thread,可以凭此开启子线程,执行耗时操作,那么为什么还有 Java 还有线程池这种类存在呢?

这是因为当业务需要我们频繁创建多个线程并进行耗时操作时,每次通过 new Thread 的方式来创建线程的方式是十分不好的。虽然线程是十分轻量的,但是新建和销毁消耗线程成本是系统操作,是十分消耗资源的,同时通过 new Thread 创建的大量线程是难以统一管理的,线程间相互竞争,可能占用过多系统资源而导致死锁。

Read More

Gadle实战(二):声明 Task

  1. 定义显示和隐式的 task 依赖
  2. 添加增量式构建支持
  3. 使用 Gradle 的内置 task 类型
  4. Gradle 的构建生命周期
  5. 编写使用闭包和监听器,实现的生命周期钩子

1. Gradle API 中的 Task

在默认情况下,每个创建的 Task 为 org.gradle.api.DefaultTask 类型的,为 org.gradle.api.Task 的实现类。

2. 声明 Task 的动作

动作(action)就是 在 task 中合适的地方放置构建逻辑

Task 提供了两个相关的方法来声明动作:doFirst(Closure)doLast(Closure),当 Task 被执行
时,动作逻辑被定义为的闭包参数,被依次执行。

1
2
3
4
5
6
task helle{
// 具体动作被封装在闭包中
doLast{
println 'last'
}
}

Read More

Gadle实战(三):自定义 Task 类

在构建脚本中可以编写 Task 的动作(Action),从而操作相关逻辑,这在 Gradle 中是十分简单的。但是当项目增长需要添加更多的逻辑时,维护起来就十分的麻烦,如果可以编程式结构实现对逻辑的编写,类似对类和方法编写,按照日常开发的思维编写代码,这对于程序开发是十分友好的,而 Gradle 提供了这种支持,开发者可以使用任意 JVM 语言,比如 Java、Groovy、Kotlin,在构建脚本中进行编码。

1. 自定义 Task

自定义 Task 包含两个组件:

Read More

Gradle实战(一):Project、Task、Property 的基本了解

本文可以学到:最基础的 Gradle构建块(project、task、property),以及它们是如何映射到 Gradle 的 API 上面的。

本篇涉及到的内容:

  1. 声明简单的 task
  2. 编写自定义的 task 类
  3. 如何获取 task 属性

1. 构建块

Gradle 构建包括三个基本的构建块: projecttaskproperty。每个构建中至少包含一个 project,进而又包含一个或者多个 taskprojecttask 暴露的 属性(property) 可以控制 Gradle 构建过程。

Read More