Android测试实践

为什么要做测试?

很多公司为了节省成本,基本上是不会要求开发写单元测试的。自己做完的功能,动手点点看看基本流程是否通畅就丢给测试了。
项目小的时候这样也不会有啥问题。随着项目的复杂度越来越高,人员越来越多,不同的人员改动到同一块代码,但彼此对原来的逻辑不是很清楚(因为代码量实在太多,想要一个人弄清楚所有细节已经不太可能)。
这也是为什么大家宁肯写新的代码也不愿意改旧的代码的原因。而如果每个功能在开发的同时配置了单元测试,那么理论上新的功能 开发完之后,所有的单元测试应该都是可以跑通的。这样就能自动帮我们检查出来一些难以发现的bug。

Android如何进行单元测试

  • androidTest目录:应包含在实际或虚拟设备上运行的测试。此类测试包括集成测试,端到端测试以及仅JVM无法验证应用程序功能的其他测试。
  • test目录:应包含在本地计算机上运行的测试,例如单元测试

Read More

错误报告

获取错误报告

  • 通过开启开发者选项,生成错误报告
  • 通过adb命令获取:adb bugreport D:\Reports

分析错误报告

默认情况下,错误报告是 ZIP 文件。ZIP 文件名类似 bugreport-BUILD_ID-DATE.zip,它可能会包含多个文件,但最重要的文件是 bugreport-BUILD_ID-DATE.txt。此文件就是错误报告,它包含系统服务 (dumpsys)、错误日志 (dumpstate) 和系统消息日志 (logcat) 的诊断输出。系统消息包括设备抛出错误时的堆栈轨迹,以及从所有应用中使用 Log 类写入的消息

Read More

Android中图片占用内存计算方法

我们在电脑上看到的 png 格式或者 jpg 格式的图片,png(jpg) 只是这张图片的容器,它们是经过相对应的压缩算法将原图每个像素点信息转换用另一种数据格式表示,以此达到压缩目的,减少图片文件大小。而当我们通过代码,将这张图片加载进内存时,会先解析图片文件本身的数据格式,然后还原为位图,也就是 Bitmap 对象,Bitmap 的大小取决于像素点的数据格式以及分辨率两者。

结论:

  • 占用内存大小的计算公式:分辨率 * 像素点大小;Android中像素点大小有:

Read More

内存管理

概述

有时候,线上会出现一些”莫名其妙”的bug,比如用户用的好好的,突然就爆出一个空指针异常,这个异常的提示信息如下:

1
2
java.lang.RuntimeException: Unable to start activity
ComponentInfo{xxx.xxx.xxx/xxx.xxx.xxxActivity}: java.lang.NullPointerException: Attempt to invoke interface method 'xxx' on a null object reference

看上去好像就是一般的空指针,但这个异常发生在启动Activity的时候。ActivityThread的performLaunchActivity方法确实有catch

1
2
3
4
5
6
7
{} catch (Exception e) {
if (!mInstrumentation.onException(activity, e)) {
throw new RuntimeException(
"Unable to start activity " + component
+ ": " + e.toString(), e);
}
}

Read More