浅谈Android稳定性优化

261 阅读4分钟

优化Android的稳定性是确保应用程序和系统在各种条件下能够可靠运行的关键方面之一。一款优秀的app一定是稳定性极高的,一款app的稳定性对运营的影响是极大的。我们从以下几个维度来考量app的稳定性。

  1. 异常处理:良好的异常处理是确保应用程序稳定性的重要因素。在关键代码块中使用try-catch语句,捕获异常并适当地处理它们,以避免应用程序崩溃。
  2. 设备兼容性测试:进行设备兼容性测试,确保应用程序在不同的Android设备上正常运行。这涉及测试各种屏幕分辨率、处理器架构、操作系统版本等因素。
  3. 线程管理防止ANR:正确管理线程对于应用程序的稳定性至关重要。避免在主线程上执行耗时操作,将它们移至后台线程。同时,避免并发访问共享数据时出现的竞争条件和死锁。

异常处理

使用kotlin编程语言的预编译空值检查有利于提升应用的稳定性,主要是降低最频繁出现的crash异常之一的空指针异常。app架构对app稳定性的影响的占比是很大的,且影响是持续且深远的,所以在项目启动的时候采用有经验的高级工程师是十分有必要的。基础架构起到的是地基的作用,地基打得有多牢固,高楼就能建多高。我这里并不是提倡割韭菜,不能说高级工程师在后期没有用,只是作用并没有早期那么明显。就算地基再好,后面来了一批初级的乱搞,再好的架构迟早也会有崩溃的一天。要想维持app的低崩溃率,持续优化的架构是必不可少的,而且得有可控的重构。那么崩溃率有行业标准吗?答案是有的。及格线大概在0.4%,优秀线大概在0.1%。一款优秀的app应该至少做到低于千分之一的崩溃率。低崩溃率也就意味着crash很少出现,怎么降低crash率呢?最直接的办法就是多测试,然后有完善的工作流,将bug分配到擅长该领域的工程师手上,不断发现增量bug和降低存量bug。同时,项目代码管理工具也是一个必不可少的好帮手,使用git等版本控制工具可以大幅缩短这一过程的时长,前提是得会用,得用好git。说到了crash,就不得不聊聊crash监测框架了。常用的crash监测框架有bugly、firebase、蒲公英等。这些第三方SDK的集成都有详细的文档,我这里就不多啰嗦了。

设备兼容性测试

设备兼容性测试,一般得保证各种主流厂商的手机都至少要有一个,且Android低版本跟高版本的都要有,也可以使用云真机平台,节省成本。同时,开发工程师也要时常注意官方的最新动向和最新版本的发布,学习各种机型和版本的适配问题。各版本的适配问题看Android的官方文档developer.android.com/about/versi…

线程管理防止ANR

线程处理不好也是造成app不稳定的一大原因。这主要是由于前端工程师缺少多并发环境的实践造成的,总是在不当的线程处理了某些操作,造成了主线程卡顿。线程的管理可以学习ExecutorService、BlockingQueue、Lock和Condition等知识。如果你嫌麻烦,也有懒人的办法,那就是使用Kotlin的协程,或者使用我的开源库github.com/dora4/dcach…来请求API接口等。另外线程处理不当还可能造成内存泄漏的问题,就是在短周期的对象中引用了长周期的对象。比如,在耗时操作的子线程中持有了Activity的强引用。这就导致Activity调onDestroy的时候,发现还有对象引用它,GC就不敢回收这部分内存,于是就造成了内存泄漏。内存泄漏对短期的影响并不大,往往要积累一个月甚至更久,才会把程序带崩。当然,这优先级肯定是在主线bug之后,但作为一款优秀的低崩溃率的app,肯定是不允许这样的事情经常发生的。