一、前言
一款好的产品应该集界面美观、操作流畅、功能稳定于一身,但是随着App功能的增多,App的性能问题会逐渐暴露出来,比如卡顿、闪退等现象。这些性能问题极大的影响了用户体验。因此,在APP的开发维护中,预防和解决性能问题显得尤为重要。日常工作和学习中,我也比较重视这一块的实战和总结,但性能优化是个大话题,我将用一个专题来记录,作为今后开发的Check List。
APP的启动速度是用户体验的第一扇门,所以第一篇文章就从应用的启动优化开始,优化APP的启动速度。
code and poem
一款好的产品应该集界面美观、操作流畅、功能稳定于一身,但是随着App功能的增多,App的性能问题会逐渐暴露出来,比如卡顿、闪退等现象。这些性能问题极大的影响了用户体验。因此,在APP的开发维护中,预防和解决性能问题显得尤为重要。日常工作和学习中,我也比较重视这一块的实战和总结,但性能优化是个大话题,我将用一个专题来记录,作为今后开发的Check List。
APP的启动速度是用户体验的第一扇门,所以第一篇文章就从应用的启动优化开始,优化APP的启动速度。
Android性能优化主要几个方面:
Android的SDK 里面,Monkey的tools是一个命令行工具,当连接Android设备时,只要在命令行里输入相应命令就能运行tools;
Monkey test是一项压力测试,可以在规定的次数范围内做任何随机的操作,随机操作包括点击、滑动、Application切换、横竖屏、应用关闭等等,用户能做的操作统统可以模拟;
Monkey test跑出来crash的bug等级永远为1,版本release前,Monkey跑出的结果中crash要为0。
业内标准:final release前,Monkey跑完的总次数应为25W次,其结果里不允许有nullPointException出现.
Android性能优化相关的开发工具有很多很多种,这里对如下六个工具做个简单的使用介绍,主要有:
Android中线程分为主线程(UI线程)和子线程,主线程主要处理和界面相关的事情,而子线程则用于执行耗时操作。如果在主线程中执行耗时操作,比如网络请求操作,则会报NetworkOnMainThreadException;如果是其他耗时操作,界面卡顿时间超过5秒则会导致程序无法及时响应(ANR)。因此耗时操作必须在子线程去执行。Android提供了五种常用的线程实现方式,分别是:
Android中线程分为主线程和子线程,主线程主要处理和UI相关的操作,而主线程中则往往用于执行耗时操作,比如网络请求和I/O操作。除了Thread之外,Android中还有一些可以用来作为线程使用的类,如AsyncTask、HandlerThread 和 IntentService。经管他们的表现形式都和Thread有区别,但是本质上依然是线程。
Android开发中经常需要在子线程和主线程间切换,通常我们会在子线程中做一些耗时的操作,比如网络请求或者I/O操作,当耗时操作完成后可能需要在UI上做一些更新,由于Android开发不能在子线程中操作UI控件(UI控件不是线程安全的),这个时候就需要通过Handler将更新UI的操作切换到主线程中执行。Android的消息机制主要就是指Handler的运行机制,所以,研究Android消息机制,其实就是研究Handler的运行机制。
在Android中Toast使用频率是相当高的,可以用来做用户提示,也可以在测试的时候方便的显示测试结果,关键是它使用方法非常简单,一行代码就搞定了
Toast.makeText(this, msg , Toast.LENGTH_SHORT).show();
但是使用久了就有个疑问,Toast.LENGTH_SHORT和Toast.LENGTH_LONG是用于设置Toast显示时长的,但是这两个时长到底是多少呢?
SharedPreferences使用方法非常简单,是Android开发中使用频率非常高的轻量级存储方式,经常被用来存放一些键值对数据,比如配置信息等,得到了很多很多开发者的青睐。但是SharedPreferences并不是万能的,如果使用不当,会造成严重的后果,下面记录一个工作中遇到的实例。