0

0

App崩溃的6个常见原因是什么

WBOY

WBOY

发布时间:2023-05-11 23:25:24

|

3966人浏览过

|

来源于亿速云

转载

人们讨厌应用程序崩溃,尤其是是程序减速或卡死几秒钟这样的现象。根据dimensional research的一项调查,61%的用户希望程序在4秒内启动,而49%的用户希望在2秒内响应输入。 如果应用发生崩溃,冻结或报错等现象,53%的用户会将app卸载。

无论您的对象是消费者还是企业,崩溃问题会令他们彻底失望。与一些移动开发人员进行了交谈,询问了他们遇到的最常见的崩溃问题有哪些,他们给出了常见的六种原因:

1.内存管理

我所问道的每个人都会谈到内存管理,大多数APP都会开启许多线程占用系统的内存。OpsClarity营销副总裁Sachin Agarwal表示,程序员在编写代码时好像在app中只有他们编写的应用一样,同时,他建议在编写程序时,要考虑使其称为为“应用生态系统中的好公民”。

内存问题并非对所有开发人员是一样的。Solstice Mobile业务开发副总裁Andrew Whiting说“在iOS中,您就可以利用Objective-C来处理大量内存问题,”。但是需要权衡利弊。“在Android上,你需要更深入的控制[内存],你可以让它完全按你想要的那样做,但这会增加复杂性。”

“在Java中遇到[运行]内存不足,我们发现通常它与加载大图像或处理位图等相关,”New Relic的高级软件工程经理Jonathan Karon表示。在移动SDK技术性能报告中并编制了常见的问题原因。“实际上有一些令人惊讶的数字看起来像Android上的链接器问题,无法找到类,或者有一个称为非分类链接的异常。” 另一方面,iOS应用程序经常受到NSInternalInconsistency异常的影响,这是因为当开发人员在一个地方更改数组或数据集合时,而其他东西正在读取那里的事物列表。

2.软件生命周期

迭代的应用程序开发过程及其版本频繁的发布,为最小化可行产品进入市场打开了大门,然后随着时间的推移改进它,现在这种做法非常流行。但由于对操作系统和第三方API的依赖性,使传统软件生命周期变的更为复杂。

“如果你看看最新Android更新的系统,应用程序崩溃的会很多,”Agarwal说。“操作系统本身不稳定或操作系统更新了,应用程序没有更新” 或者用户不下载新的版本,这些“你都无法控制,它说明了一个核心的开发过程。”

移动和云计算的发展增加了第三方服务及其相关API的使用,从而节省了时间并有助于将应用程序更快地推向市场,但他们有自己的一系列问题。

“许多库是都有共同的问题,”Whiting说。 “他们试图解决每个人的问题,而不是为任何人提供最佳解决方案。” 例如,给定的API可能对特定应用程序具有性能限制。

API也可能使用棘手的技术,比如iOS方法调整。当原始代码(如Apple的API)不可用时,开发人员在原始代码(如Apple的API)基础之上进行修改。“你可以称之为iOS应用程序开发的'黑暗艺术'之一,”在线旅行社Fareportal的移动主管Raman Bhatia说。“[但]如果您的应用程序代码以某种方式编写,则可能导致崩溃。”

API也可能引起其他问题。“API延迟,错误率,数据带宽, API的版本以及API请求的数量都可能由小问题印发大问题,”Agarwal说。然后是API本身,这就需要专门的工具来跟踪所有内容。

API也可能导致其他问题,如内存错误。 “如果你创造了其他的对象前已经从内存中移除的一个对象,会认为通常这是没有问题的,但需要注意的是你不知道后续创建的对象到底需不需要引用已经删除的对象”联合创始人和开发者Long Le说道“尤其是当你引入第三方框架时,就会出现问题。你永远无法确定他们正在清理什么以及他们正在创造什么。”

3.测试不充分

ColorMagic
ColorMagic

AI调色板生成工具

下载

测试的需求是很明显的,但是需要获得足够的覆盖率,特别是对于大量的Android版本和设备,可能具有挑战性。虽然有模拟器,但在服务器上运行的软件性能限制可能会与真机不同。

例如,应用程序的一个线程读取数据库,同时第二个线程尝试修改这一个数据库,“这是一个时间问题,” Couchbase移动首席架构师Wayne Carter说。“如果他们没有在同一时刻发生碰撞,那么这个问题就不会出现,可以用日志描述来掩盖。” 模拟器通常就不会和真机一样。

在不同的设备上运行不同的系统是个可行的方案,但是这种方法比模拟器消费高。这就需要在预算和需求之间权衡

测试应结合行业标准和用户期望的基准测试,以确保开发人员和用户可接受的内容。测试也应该持续进行。监控性能并查找用户反馈,然后尽快解决问题。

4.网络管理

随着应用程序越来越依赖网络,无论是数据还是第三方服务,网络管理已成为一个麻烦的源头。

发生崩溃的最主要原因是当你正要获取数据、提交了一些东西等待恢复而APP发生响应或者挂起。运营副总裁Pravin Vazirani说道,可能开发人员使Wi-Fi连接功能非常完善,但用户在不好的网络区域时就会发生问题

处理网络问题的一个好方法是告知用户连接中断,并在可能的情况下提供执行可能感兴趣的其他操作的机会。如果人们了解超出应用程序控制范围的临时状况的原因,他们更有可能保持冷静,不会对软件感到恼火。

5.错误状况和异常处理

由于移动开发的复杂性,一些错误是不可避免的,无论是意外的API更改,避免先前检测的内存问题,还是网络连接状况,甚至只是在传输大型文件(如图像或视频)时降低数据传输的速度

在这种情况下,最好的方法是给与良好的错误和异常处理方式。比如用户输入错误的数据、本应提供数值的内容而提供文字到文本框内等,这样,应用程序就不会被意外尝试而报错。

在任何这些情况下,正确编码的应用程序都会注意到意外情况,并且在通知用户错误的同时,可以优雅地终止进程或活动。如果你能保持沟通渠道畅通,就会有更好的机会留住用户。

6.代码太多了

最好的建议是保持应用程序简单。找到特定用途的插件,使用插件并编写必要的代码。企业移动开发公司Lextech Global Services的高级系统工程师Felipe Laso-Marsetti说:“最好和最无错误的代码是不是你自己编写的代码。”

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

765

2023.08.10

Python 多线程与异步编程实战
Python 多线程与异步编程实战

本专题系统讲解 Python 多线程与异步编程的核心概念与实战技巧,包括 threading 模块基础、线程同步机制、GIL 原理、asyncio 异步任务管理、协程与事件循环、任务调度与异常处理。通过实战示例,帮助学习者掌握 如何构建高性能、多任务并发的 Python 应用。

377

2025.12.24

java多线程相关教程合集
java多线程相关教程合集

本专题整合了java多线程相关教程,阅读专题下面的文章了解更多详细内容。

32

2026.01.21

C++多线程相关合集
C++多线程相关合集

本专题整合了C++多线程相关教程,阅读专题下面的的文章了解更多详细内容。

29

2026.01.21

C# 多线程与异步编程
C# 多线程与异步编程

本专题深入讲解 C# 中多线程与异步编程的核心概念与实战技巧,包括线程池管理、Task 类的使用、async/await 异步编程模式、并发控制与线程同步、死锁与竞态条件的解决方案。通过实际项目,帮助开发者掌握 如何在 C# 中构建高并发、低延迟的异步系统,提升应用性能和响应速度。

103

2026.02.06

数据库三范式
数据库三范式

数据库三范式是一种设计规范,用于规范化关系型数据库中的数据结构,它通过消除冗余数据、提高数据库性能和数据一致性,提供了一种有效的数据库设计方法。本专题提供数据库三范式相关的文章、下载和课程。

385

2023.06.29

如何删除数据库
如何删除数据库

删除数据库是指在MySQL中完全移除一个数据库及其所包含的所有数据和结构,作用包括:1、释放存储空间;2、确保数据的安全性;3、提高数据库的整体性能,加速查询和操作的执行速度。尽管删除数据库具有一些好处,但在执行任何删除操作之前,务必谨慎操作,并备份重要的数据。删除数据库将永久性地删除所有相关数据和结构,无法回滚。

2111

2023.08.14

vb怎么连接数据库
vb怎么连接数据库

在VB中,连接数据库通常使用ADO(ActiveX 数据对象)或 DAO(Data Access Objects)这两个技术来实现:1、引入ADO库;2、创建ADO连接对象;3、配置连接字符串;4、打开连接;5、执行SQL语句;6、处理查询结果;7、关闭连接即可。

357

2023.08.31

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

3

2026.03.11

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Java 教程
Java 教程

共578课时 | 80.8万人学习

国外Web开发全栈课程全集
国外Web开发全栈课程全集

共12课时 | 1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号