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

发布时间 - 2023-05-11 00:00:00    点击率:

人们讨厌应用程序崩溃,尤其是是程序减速或卡死几秒钟这样的现象。根据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.测试不充分

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

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

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

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

4.网络管理

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

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

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

5.错误状况和异常处理

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

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

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

6.代码太多了

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


# app  # Java  # objective-c  # 架构  # 线程  # 多线程  # 对象  # 数据库  # android  # ios  # 软件工程  # 应用程序  # 开发人员  # 第三方  # 您的  # 副总裁  # 如果你  # 你可以  # 最好的  # 尤其是  # 每个人 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何彻底卸载建站之星软件?  微信小程序 input输入框控件详解及实例(多种示例)  如何在云主机快速搭建网站站点?  如何使用 Go 正则表达式精准提取括号内首个纯字母标识符(忽略数字与嵌套)  Laravel Sail是什么_基于Docker的Laravel本地开发环境Sail入门  再谈Python中的字符串与字符编码(推荐)  敲碗10年!Mac系列传将迎来「触控与联网」双革新  Laravel任务队列怎么用_Laravel Queues异步处理任务提升应用性能  如何在阿里云虚拟主机上快速搭建个人网站?  制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?  绝密ChatGPT指令:手把手教你生成HR无法拒绝的求职信  如何用IIS7快速搭建并优化网站站点?  魔方云NAT建站如何实现端口转发?  如何在万网利用已有域名快速建站?  Python函数文档自动校验_规范解析【教程】  Edge浏览器如何截图和滚动截图_微软Edge网页捕获功能使用教程【技巧】  Laravel怎么创建控制器Controller_Laravel路由绑定与控制器逻辑编写【指南】  免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?  如何快速查询网址的建站时间与历史轨迹?  详解Oracle修改字段类型方法总结  Midjourney怎样加参数调细节_Midjourney参数调整技巧【指南】  免费视频制作网站,更新又快又好的免费电影网站?  Android利用动画实现背景逐渐变暗  edge浏览器无法安装扩展 edge浏览器插件安装失败【解决方法】  Laravel怎么返回JSON格式数据_Laravel API资源Response响应格式化【技巧】  Laravel模型事件有哪些_Laravel Model Event生命周期详解  文字头像制作网站推荐软件,醒图能自动配文字吗?  如何快速查询域名建站关键信息?  Laravel如何清理系统缓存命令_Laravel清除路由配置及视图缓存的方法【总结】  打造顶配客厅影院,这份100寸电视推荐名单请查收  使用C语言编写圣诞表白程序  php结合redis实现高并发下的抢购、秒杀功能的实例  *服务器网站为何频现安全漏洞?  ChatGPT常用指令模板大全 新手快速上手的万能Prompt合集  如何登录建站主机?访问步骤全解析  做企业网站制作流程,企业网站制作基本流程有哪些?  微信小程序 require机制详解及实例代码  Android中Textview和图片同行显示(文字超出用省略号,图片自动靠右边)  Laravel如何使用API Resources格式化JSON响应_Laravel数据资源封装与格式化输出  Laravel怎么配置.env环境变量_Laravel生产环境敏感数据保护与读取【方法】  rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted  Android滚轮选择时间控件使用详解  Laravel软删除怎么实现_Laravel Eloquent SoftDeletes功能使用教程  JavaScript模板引擎Template.js使用详解  Laravel怎么在Controller之外的地方验证数据  Laravel如何使用Service Container和依赖注入?(代码示例)  Laravel如何保护应用免受CSRF攻击?(原理和示例)  Linux虚拟化技术教程_KVMQEMU虚拟机安装与调优  微信小程序 配置文件详细介绍  今日头条微视频如何找选题 今日头条微视频找选题技巧【指南】