0%

前言

在并发编程中,有两个基本执行单元:进程(processes) 和 线程(thread)。在 Java 编程语言中,并发编程主要涉及线程。但是,进程也很重要。

目录

一、概念

进程:是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。进程是线程的容器,是程序的实体。程序是指令、数据及其组织形式的描述。

线程:是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。

进程——资源分配的最小单位。指在系统中正在运行的一个应用程序。

线程——cpu调度/程序执行的最小单位。系统分配处理器时间资源的基本单元。

Read more »

前言

一般情况下,我们使用某个类时必定知道它是什么类,是用来做什么的,并且能够获得此类的引用。于是我们直接对这个类进行实例化,之后使用这个类对象进行操作。

反射则是一开始并不知道我要初始化的类对象是什么,自然也无法使用 new 关键字来创建对象了。这时候,我们使用 JDK 提供的反射 API 进行反射调用。

目录

一、反射是什么

反射就是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;并且能改变它的属性。是Java被视为动态语言的关键。

Java反射机制主要提供了以下功能:

  • 在运行时构造任意一个类的对象

  • 在运行时获取或者修改任意一个类所具有的成员变量和方法

  • 在运行时调用任意一个对象的方法(属性)

Read more »

前言

代理模式分为静态代理和动态代理,动态代理是一种常见的设计模式。

目录

一、什么是代理模式

代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。通俗的来讲代理模式就是我们生活 中常见的中介。代理模式的目的:

  • 通过引入代理对象的方式来间接访问目标对象,防止直接访问目标对象给系统带来的不必要复杂性。

  • 通过代理对象对访问进行控制。

Read more »

前言

注解是一种元数据形式,为编译器提供信息。

目录

一、注解是什么

Annotations (注解),又称 Java 标注,是 JDK5.0 引入的一种注释机制。元数据的一种形式,提供有关于程序但不属于程序本身的数据。注解对它们注解的代码的操作没有直接影响。

Read more »

前言

泛型(Generic)是 Java 编程语言的一个强大功能。它们提高了代码的类型安全性,在编译时可以检测到更多的错误。

目录

一、为什么使用泛型

泛型使在定义类、接口和方法时,使类型成为参数。与方法声明中使用的形式参数非常相似,类型形参为你提供了一种让不同的输入重用相同的代码的方法。区别在于形式参数的输入是值,而类型形参的输入是类型。

使用泛型的好处:

  • 在编译时进行更强大的类型检查,Java 编译器将强类型检查应用于泛型代码,并在代码违反类型安全时发出错误。
  • 消除类型转换,泛型中的类型在使用时指定。
  • 能够实现通用算法,让多种不同数据类型执行相同的代码。
Read more »

Crash监控

Crash(应用崩溃)是由于代码异常而导致 App 非正常退出,导致应用程序无法继续使用,所有工作都 停止的现象。发生 Crash 后需要重新启动应用(有些情况会自动重启),而且不管应用在开发阶段做得 多么优秀,也无法避免 Crash 发生,特别是在 Android 系统中,系统碎片化严重、各 ROM 之间的差 异,甚至系统Bug,都可能会导致Crash的发生。

在 Android 应用中发生的 Crash 有两种类型,Java 层的 Crash 和 Native 层 Crash。这两种Crash 的监 控和获取堆栈信息有所不同。

Read more »

APK 结构

在讨论如何缩减应用的大小之前,有必要了解下应用 APK 的结构。APK 文件由一个 Zip 压缩文件组成,其中包含 构成应用的所有文件。这些文件包括 Java 类文件、资源文件和包含已编译资源的文件。

APK 包含以下目录:

  • META-INF/ :包含 CERT.SF 和 CERT.RSA 签名文件,以及 MANIFEST.MF 清单文件。
  • assets/ :包含应用的资源;应用可以使用 AssetManager 对象检索这些资源。
  • res/ :包含未编译到 resources.arsc 中的资源(图片、音视频等)。
  • lib/ :包含特定于处理器软件层的已编译代码。此目录包含每种平台类型的子目录,如 armeabi 、 armeabi-v7a 、 arm64-v8a 、 x86 、 x86_64 和 mips 。
Read more »

电量优化

电池续航时间是移动用户体验中最重要的一个方面。没电的设备完全无法使用。因此,对于应用来说,尽可能地考

虑电池续航时间是至关重要的。在开发时对于单个APP应该注意能够:

  • 减少操作:您的应用是否存在可删减的多余操作?例如,是否可以缓存已下载的数据,而不是每次重新下载 数据?
  • 推迟操作:应用是否需要立即执行某项操作?例如,是否可以等到设备充电后或者Wifi连接时(通常情况下使 用移动网络要比WIFI更耗电 )再将数据备份到云端?
  • 合并操作:工作是否可以批处理,而不是多次将设备置于活动状态?比如和服务器请求不同的接口获取数 据,部分接口是否可以合并为一个?
Read more »

ANR

ANR(Application Not responding),是指应用程序未响应,Android系统对于一些事件需要在一定的时间范围内完成,如果超过预定时间能未能得到有效响应或者响应时间过长,都会造成ANR。在 Android 里,应用程序的响应性是由 Activity Manager 和 WindowManager 系统服务监视的。当它监测到以下情况中的一个时,Android 就会针对特定的应用程序显示 ANR。

Read more »

一 、启动优化

启动耗时统计

TTID:初步显示所用时间

系统日志统计,logcat 包含一个输出行,其中包含名为 Displayed 的值。此值代表从启动进程到在屏幕上完成对应 Activity 的绘制所用的时间。

adb 命令统计,查看启动时间的另一种方式是使用命令:shell am start -S -W com.example.app/.MainActivity

TTFD:完全显示所有时间

衡量这些异步加载资源所耗费的时间,我们可以在异 步加载完毕之后调用 activity.reportFullyDrawn() 方法来让系统打印到调用此方法为止的启动耗时。

Read more »