Concurrency: Basic Threading (1)

本系列是Thinking in Java (Fourth Edition)中Concurrency一章的内容总结。主要关注实例、常见用法和陷阱,便于日后查用。 1. Defining Tasks   任务(Task)用于描述希望并发运行的活动。定义一个任务,只需实现Runnable接口,并在run()方法中给出任务的具体行为: public class LiftOff implements Run…
Read more

Gradle Cheat Sheet (19): Multidex Support

  在Android的Java虚拟机上运行的是Dalvik字节码,而不是Java字节码。在Java编译完成后,Java字节码会被转换为Dalvik字节码,称为Dexing。在这个过程中,会生成一张包含了应用中的所有方法的表,每个方法用两个字节进行索引,也就是说,最多能有65k个方法。如果方法数量过多,将无法完成编译。   以这里的工程为例,总共有100个类,每个类有700个方法,尝试编译将给出错误…
Read more

Gradle Cheat Sheet (18): Adding a Signing Configuration

  给App签名需要三个步骤:首先需要创建一个Key Store和一个Key;然后在build.gradle中创建一个签名配置,主要用于描述如何访问keystore和key;最后要把这个签名配置指定给Build Type。 1. 创建Key Store和Key   选择Build > Generate Signed APK…,打开Generate Signed APK向导,首先需…
Read more

Gradle Cheat Sheet (15): Flavors

1. Declaring Flavors   除了使用Build Type,也可以使用Product Flavor来对build进行定制。Product Flavor一般用于创建提供给用户的不用应用版本,比如免费版和付费版。   Anroid插件不会自动创建默认的Product Flavor。要创建Product Flavor,只需在productFlavors {} 块中进行定义,如: andr…
Read more