oppo应用多次启动失败

oppo应用多次启动失败,第1张

公司自己开发的app,已上线使用;

异常只有部分oppo手机用户反馈,在华为,三星等其它品牌,相同版本号的系统上都没问题;

app中开启了捕获异常的日志功能,但并没有捕获到该异常;

在这部分反馈问题的oppo手机上,也是有时出现有时正常;

发生该异常时,点击取消无反应,点击立即清除对话框消失,然后立刻又d出来(后来发现是每一两秒就会d出一个该对话框);

用公司测试机及oppo真机云测过程中,都没有复现该异常;

若您的OPPO手机使用软件时出现闪退,请根据实际情况进行排查:

手机自带软件闪退、无响应:

1、若手机自带应用内保存数据和缓存过多,导致运行异常,建议您进入「设置 >(应用)> 应用管理 > 应用列表 > 选择闪退的应用 > 存储占用」,清除应用数据和缓存。

2、确认应用版本是否最新,建议升级至最新版本尝试。

3、重启手机尝试。

若以上方法仍无法解决您的问题,建议您携带手机和购机凭证前往就近的OPPO官方服务中心,由专业的工程师检测。

游戏软件闪退、黑屏、无响应:

1、建议您清理后台应用程序,仅保留游戏进程或重启手机尝试。

2、建议您进入手机「设置 > (应用)> 应用管理 > (应用列表) > 右上角“:”或“_” > 显示系统程序 > 选择闪退的应用 > 存储占用」,清除应用数据尝试。

3、建议您检查网络,切换Wi-Fi网络和数据网络,重新进入游戏尝试。

4、建议您优先从手机自带的软件商店下载安装使用游戏软件,非软件商店下载的部分游戏可能存在闪退,启动时黑屏现象。

5、将游戏软件版本更新至最新尝试,避免因版本异常存在兼容性问题。

温馨提示:

① 单机游戏清除数据会导致存档丢失,建议备份数据后再清除数据。

② 若游戏软件和手机存在共性兼容问题,您可反馈至游戏软件客服进行适配优化。

若第三方软件闪退、停止运行、无响应:

1、若安装软件后出现闪退,可能是应用兼容异常,建议您从手机自带的软件商店下载安装。

2、进入「设置 >(应用)> 应用管理 > 应用列表」,找到闪退的软件,进入“应用权限”打开“获取手机识别码”“读取、写入或删除存储空间”等相关权限。

3、进入手机「设置 >(应用)> 应用管理 > 应用列表」,点击右上角“:”图标,选择“显示系统程序”,搜索Android System Webview,点击右上角“:”图标,卸载更新尝试。

4、若应用版本更新后出现闪退,建议您联系对应闪退软件客服反馈,或通过豌豆荚、应用宝等渠道下载安装低版本尝试。

5、若系统版本更新后出现闪退,建议您查看闪退软件是否为最新版本,将对应软件升级到最新版本后尝试。

6、个别软件存在低概率兼容问题,建议您通过清除缓存、清理后台应用,通过商店或官网更新版本等方式尝试解决,您还可以通过对应软件客服反馈问题。

若以上方法未能解决您的问题,可以携带相关购机凭证前往OPPO官方服务中心检测处理。

如果您遇到手机自带相机应用打不开的情况,可以先试试以下处理方法:

1、一键清理后台所有应用后重新进入

*** 作方法:

(1)未开启虚拟按键:从屏幕底部上滑并停顿1秒,点击“清除”;

(2)已开启虚拟按键:点击屏幕底部多任务键“≡”,点击“清除”。

2、长按“相机”图标,点击「应用信息(详情) > 存储占用 > 清除数据」或进入手机「设置 > (应用)> 应用管理 > (应用列表) > 右上角“” > 显示系统程序 > 相机 > 存储占用」,清理相机应用数据。

3、查看手机是否电量充足,建议充电后重启手机尝试。

4、查看手机系统版本是否为最新版本,进入「设置> 关于本机/软件更新 > (点击顶部版本号检测更锋裂裂新) > 立即下载」将手机系统版本升级银闭至最新。

5、若安装了第三方相机应用,建议您更新到最新版。若安装第三方相机应用后出现以上述问题,建议您卸载该应用程序尝试。

6、若您使用三方应用时需要调出摄像头,但无法打开相机,可能是三方应用未获取相机权限导致。建议您长按该应用图标,进入“权限管理”查看,开启对应应用的源如相机权限。

如果以上方法对您帮助有限,辛苦您携带手机和相关购机凭证前往OPPO官方服务中心,接下来交由我们专业的工程师为您检测手机。

保证你的手机是最新版本,如果不是请升级。最新版本情况下,使用软件出现闪退的现象,建议按照以下方法 *** 作:

1、备份软件的资料,进入设置--应用程序,找到出现闪退的软件,清除数据;

2、如果软件有新版本,升级到最新的版本,或者卸载后在软件商店重新下载尝试;

3、备份重要资料,给手机进行恢复出厂设置;

若以上方法均未能解决你的问题,可以携带购机发票、保修卡和手机前往就近的OPPO客户服务中心检测处理。

手机清理缓存的 *** 作方法:

进入手机管家或者安全中心--清理加速--扫描完成--点击缓存垃圾--选择需要删除的再清理即可。

注意:清理会把手机缓存删除,建议把需要删除的选择即可。

清理单个软件数据

进入设置--常规--应用程序管理,找到对应软件,清除软件数据。

清理手机垃圾的方法:

1、ColorOS 30版本,进入手机管家--清理加速,点击即可清理手机垃圾;

2、ColorOS 21版本,安全中心--清理加速--选择需要清理的垃圾文件即可;

3、ColorOS 20版本,文件管理--右下角文件清理--选择需要清理的垃圾即可;

4、ColorOS 10版本,文件管理--右下角文件清理--选择需要清理的垃圾即可。

深入理解Android Runtime

申国骏

2022-08-08 12:31·字数:2599·阅读:2340

imagepng

上图是Android整体的架构,Android Runtime之于Android而言相当于心脏之于人体,是Android程序加载和运行的环境。这篇文章主要针对Android Runtime部分进行展开,探讨Android Runtime的发展以及目前现状,并介绍应用Profile-Guided Optimization(PGO)技术对应用启动速度进行优化的可行性。转载请注明来源「申国骏」

App运行时演进

JVM

Android原生代码使用Java或者Kotlin编写,这些代码会通过javac或者kotlinc编译成class文件,在Android之前,这些class文件会被输入到JVM中执行。JVM可以简单分为三个子系统,分别是Class Loader、Runtime Data Area以及Execution Engine。其中Class Loader主要负责加载类、校验字节码、符号引用链接及对静态变量和静态方法分配内存并初始化。Runtime Data负责存储数据,分为方法区、堆区、栈区、程序计数器以及本地方法栈。Execution Engine负责二进制代码的执行以及垃圾回收。

imagepng

Execution Engine中,会采用Interpreter或者JIT执行。其中Interpreter表示在运行的过程中对二进制代码进行解释,每次执行相同的二进制代码都进行解释比较浪费资源,因此对于热区的二进制代码会进行JIT即时编译,对二进制代码编译成机器码,这样相同的二进制代码执行时,就不用再次进行解释。

imagepng

DVM(Android 21/22)

JVM是stack-based的运行环境,在移动设备中对性能和存储空间要求较高,因此Android使用了register-based的Dalvik VM。从JVM转换到DVM我们需要将class文件转换为dex文件,从class转换到dex的过程需要经过 desugar -> proguard -> dex compiler三个过程,这三个过程后来逐步变成 proguard -> D8(Desugar) 直到演变到今天只需要一步R8(D8(Desugar))。

imagepng

我们主要关注Android中Runtime Engine与JVM的区别。在Android早期的版本里面,只存在Interpreter解释器,到了Android22版本将JIT引入,这个版本Dalvik与JVM的Runtime Engine区别不大。

imagepng

ART-AOT(Android 44/50)

为了加快应用的启动速度和体验,到了Android44,Google提供了一个新的运行时环境ART(Android Runtime),到了Android50,ART替换Dalvik成为唯一的运行时环境。

imagepng

ART运行时环境中,采用了AOT(Ahead-of-time)编译方式,即在应用安装的时候就将dex提前编译成机器码,经过AOT编译之后dex文件会生成oat文件。这样在应用启动执行的时候,因为不需要进行解释编译,大大加快了启动速度。

imagepng

然而AOT带来了以下两个问题:

应用安装时间大幅增加,由于在安装的过程中同时需要编译成机器码,应用安装时间会比较长,特别在系统升级的时候,需要对所有应用进行重新编译,出现了经典的升级等待噩梦。

imagepng

应用占用过多的存储空间,由于所有应用都被编译成oat机器码,应用所占的存储空间大大增加,使得本来并不充裕的存储空间变得雪上加霜。

进一步思考对应用全量进行编译可能是没有必要的,因为用户可能只会用到一个应用的部分常用功能,并且全量编译之后更大的机器码加载会占用IO资源。

ART-PGO(Android 70)

从Android70开始,Google重新引入了JIT的编译方式,不再对应用进行全量编译,结合AOT、JIT、Interpreter三者的优势提出了PGO(Profile-guided optimization)的编译方式。

在应用执行的过程中,先使用Interpreter直接解释,当某些二进制代码被调用次数较多时,会生成一个Profile文件记录这些方法存储起来,当二进制代码被频繁调用时,则直接进行JIT即时编译并缓存起来。

当应用处于空闲(屏幕关闭且充电)的状态时,编译守护进程会根据Profile文件进行AOT编译。

当应用重新打开时,进行过JIT和AOT编译的代码可以直接执行。

这样就可以在应用安装速度以及应用打开速度之间取得平衡。

imagepng

imagepng

JIT 工作流程:

imagepng

ART-Cloud Profile(Android 90)

不过这里还是有一个问题,就是当用户第一次安装应用的时候并没有进行任何的AOT优化,通常会经过用户多次的使用才能使得启动速度得到优化。

imagepng

考虑到一个应用通常会有一些用户经常使用执行的代码(例如启动部分以及用户常用功能)并且大多数时候会有先行版本用于收集Profile数据,因此Google考虑将用户生成的Profile文件上传到Google Play中,并在应用安装时同时带上这个Profile文件,在安装的过程中,会根据这个Profile对应用进行部分的AOT编译。这样当用户安装完第一次打开的时候,就能达到较快的启动速度。

imagepng

imagepng

Profile in cloude 需要系统应用市场支持,在国内市场使用Google Play的占比非常低,因此cloud profile的优化在国内几乎是没有作用的,不过Profile的机制提供了一个可以做启动优化的思路。早在2019年,支付宝就在秒开技术的回应的里面提到过profile-based compile的技术,参考:如何看待今日头条自媒体发布谣言称「支付宝几乎秒开是因为采用华为方舟编译器」?,这也是我们一直研究Profile技术的原因。困扰着我们的一直有两个问题,第一个问题是如何生成Profile文件,第二个问题是怎么使用生成的Profile文件。对于第一个问题的解决相对还是有思路的,因为app运行就会生成profile文件,因此我们手动运行几次app就能在文件系统中收集到这个文件,不过如何以一种较为自动化的手段收集仍然是个问题。第二个问题我们知道Profile文件最终生成的位置,因此我们可以把生成的文件放到相应的系统目录,不过大多数手机和应用都没有权限直接放置这个文件。因此Profile优化技术一直都没有落地,直到Baseline Proflie让我们看到了希望。

Baseline Profile

Baseline Profile是一套生成和使用Profile文件的工具,在2022年一月份开始进入视野,随后在Google I/O 2022随着Jetpack新变化得到广泛关注。其背景是Google Map加快了发版速度,Cloud Profle还没完全收集好就上新版,导致Cloud Proflie失效。还有一个背景是Jetpack Compose 不是系统代码,因此没有完全编译成机器码,而且Jetpack Compose库比较大,因此在Profile生成之前使用了Jetpack Compose的应用启动会产生性能问题。最后Google为了解决这些问题,创造了收集Profile的BaselineProfileRule Macrobenchmark以及使用Profile的ProfileInstaller。

使用Baseline Profile的机制可以在Android7及以上的手机上得到应用的启动加速,因为从上述知道Android7就已经开始有PGO(Profile-guided optimization)的编译方式。生成的Profile文件会打包到apk里面,并且会结合Google Play的Cloud Profile来引导AOT编译。虽然在国内基本上用不了Cloud Profile,不过Baseline Profile是可以独立于Google Play单独使用的。

imagepng

在使用了Baseline Proflie之后,有道词典的启动速度从线上统计上看,冷启动时间有15%的提升。

这篇文章主要介绍了Android Runtime的演进以及对于应用启动的影响,下一篇文章我会详细介绍关于Profile&dex文件优化、Baseline Profile工具库原理,以及在实际 *** 作上如何使用的问题,敬请大家期待一下!

面对这些现象,发现以往的修复bug的经验都不起作用。于是,默默的打开了百度,百度结果一看,一堆在oppo手机上遇到过这个问题的开发者提问,还有微信,支付宝,甚至oppo系统自带的软件频繁报这个异常错误。而提出的解决方案,大同小异,要么是官网回答,请提供更为完整的信息,然后无下文,要么是让用户进应用设置,清除缓存,删除数据,甚至还有格式化手机,恢复出厂设置的。结果一试,还真的有点效果,用户能正常使用了,但是用不了多久,又出现了。面对这样的情况下,于是乎,把这口黑锅甩给了oppo系统,给市场方的答案是,系统bug,微信,支付宝,都遇到过,不是app的关系,遇到这种情况,只有清除数据,还是不行的话,那就恢复出厂设置。并且,本着做好事不留名的人道主义精神,笔者将这个oppo的“bug”,通过官方开发者公众号,反馈给了人工客服。顺便吐槽一句,体验感真不咋地,排队三小时,一直提示笔者前面多少人排队,最后终于到了,结果还是一个客服同时跟好多个客户沟通,每说一句话,都要等半天才回应。最后,好不容易沟通完,说的是测了一下,没有复现,会继续跟进测试,让笔者等邮件通知,结果到今天为止,也再无音讯。

但是,反映该异常的手机用户从一台,到两台,到三台,每天市场人员都在问,于是开始换了思路想,就算是网上说的那样oppo系统的关系,那也有原因引起触发这个问题,毕竟同手机上其它那么多应用,都能正常运行。

思路:收集问题用户的信息,尽可能创造相同的测试环境,以复现该异常。于是,让市场人员数收集了问题用户的应用设置界面截图,以及“关于手机”的截图。再在oppo开放平台提供的真机远程云测功能(这功能还是比较香的),选择相同机型进行真机测试。但是经过反复测试,还是没能复现该异常。最后,注意到了用户的一个细节设置。

对,就是这个允许自动启动设置项,而系统异常提示又是提示的“多次启动失败”,似乎,从名字里面能感受到一丝丝的关联。于是,真机测试时,打开该设置项开关。从新启动app,皇天不负有心人,果然报该异常。按照该 *** 作,反复测试了多台oppo手机及其它机型,最后发现其它系统手机无该异常,而oppo Android 10 会有该异常提示。

既然找到复现方法,那就比较好办了。接下来,利用oppo远程真机测试提供的日志功能,重现该异常前,获取日志,反复d出该异常之后,导出日志报告文档。打开本地日志文档,寻找答案,直接以自己app包名为关键字进行搜索。最后发现日志中,反复抛出如图异常

本文主要介绍笔者解决oppo系统提示的自己开发的app多次启动失败,尝试清除历史记录来恢复这个异常提示。网上百度出来的方案一大堆,大部分都是粘贴复制,笔者不知道是不是真能解决,但至少这些解决方案,不适合自己的情况。最后还是通过数据分析,修复了该异常。

而对于oppo的该异常提示,笔者认为有几种可能:

以上仅代表个人观点,如有异议,欢迎大神们批评指正。

以上就是关于oppo应用多次启动失败全部的内容,包括:oppo应用多次启动失败、OPPO手机多次启动失败,尝试清除历史记录、OPPOK7x相机多次启动失败尝试清除历史记录来恢复等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/9557211.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-29
下一篇2023-04-29

发表评论

登录后才能评论

评论列表(0条)

    保存