问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

诡异,Unity在安卓运行崩溃问题,求助

发布网友 发布时间:2022-04-30 16:03

我来回答

1个回答

热心网友 时间:2022-06-27 00:22

在整个开发阶段和测试阶段,出现了很多预料之外的事情,比如size是1M多的json文件解析、高清图片导致OOM、莫名其妙的崩溃等。这些意外无一不影响开发计划,增大压力,最直接的表现是晚上加班和周末加班。写代码和修改代码远比想象中的难控制。用户体验增加了代码的细节处理难度、逻辑处理难度,android莫名的崩溃增加解决bug的难度。就这次开发,总结了一些经验。测试人员经常会报告小米1手机运行壁纸软件时会崩溃的问题,崩溃日志是:java.lang.RuntimeException:Failedtoregisterinputchannel.Checklogsfordetails.atandroid.view.InputQueue.nativeRegisterInputChannel(NativeMethod)atandroid.view.InputQueue.registerInputChannel(InputQueue.java:92)atandroid.view.ViewRoot.setView(ViewRoot.java:570)atandroid.view.WindowManagerImpl.addView(WindowManagerImpl.java:177)atandroid.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)atandroid.widget.Toast$TN.handleShow(Toast.java:411)atandroid.widget.Toast$TN$1.run(Toast.java:337)atandroid.os.Handler.handleCallback(Handler.java:587)atandroid.os.Handler.dispatchMessage(Handler.java:92)atandroid.os.Looper.loop(Looper.java:130)根据日志推测该崩溃是和Toast有关。可是问题就奇怪了,我在代码中只调用Toast.makeTest().show(),为什么会引起这个崩溃。然后根据测试人员的反馈,当设置壁纸成功后,会引起这个崩溃,而且测试人员是在频繁的操作下报出来这个问题的。根据这个现象,推断有可能以下两个原因引起的,一是,设置壁纸引起桌面发生变化,桌面发生变化时弹出toast会导致崩溃;二是,频繁不间断的弹出toast会引起这个问题。而之后测试人员反馈了一个新的现象,当进行新浪微博分享失败后(前提是该新浪微博帐号是有问题的),再去浏览壁纸图片也导致了该崩溃,而且此现象仅出现了一次再也不复现。该bug最终是遗留解决。针对这种问题,在以后的版本开发中肯定也会出现,怎么避免它再次出现。我总结了从几个方面做努力。先借来小米1手机来玩,学习手机发烧友的习惯和测试人员的思维,然后体验小米1手机,对小米1要有更深入的认识;和小米进行沟通,还没有认识牛*的朋友在小米做开发,所以可以先在小米论坛上做活跃用户,主动和对方和网友沟通;了解inputchannel是什么功能,什么机制,研究anroid2.3的关于这块的native代码。刚开始进入测试阶段时,测试人员每天都会报告壁纸软件频繁崩溃的问题。对于一些简单的崩溃问题,一般是空指针而且还复现,就不在这里说了。测试报告说,浏览壁纸图片保存壁纸,预览壁纸和设置壁纸时经常的崩溃,这种崩溃没有规律可复现但是很频繁出现。这种问题的原因是OOM,比如,在MX2手机上,桌面预览要使用的位图大小是1280X800X2X4字节约等于8M,软件中的位图各种处理(缩放、剪切、渲染、多个activity同时存在等)会导致内存使用量飙升到50多M,当超过64M左右时,软件会报OOM错误。没有彻底解决OOM的方法,网上有很多避免OOM的方法,比如延迟加载图片、及时回收内存、弱引用等。另外在生成bitmap的地方要使用try解决了这些崩溃问题后,还会有新的导致崩溃的原因。测试人员说中午吃完饭回来,打开壁纸软件突然崩溃。分析这个现象后,找到原因是,长期待机情况下android杀掉了壁纸软件的进程。但是疑问出现了,此时进程被杀掉了之后点击app的icon,不是又重新打开了进程,重新运行了吗,怎么会崩溃呢。经过分析,发现有个诡异的地方是,android待机后把壁纸进程给杀掉了,但是该软件的activity并没有从task中删除掉,所以当再点击app的icon时,会执行task顶层的activity的onCreate,而onCreate里边的一些东西还未初始化,会因为空指针而崩溃。后来,测试人员报告了一个诡异的bug,安装软件后第一次打开软件,欢迎界面的图片显示不出来,以后每次打开软件欢迎界面的图片都能打开出来。图片是一个jpg文件,在raw中。最后找到原因是,在decodebitmap,scalebitmap时,其中要操作的一个变量imagewidth在第一次时是0,没有赋值,之后再操作就不是0,赋值了。但是为什么会这样,最后找到原因了,imagewidth是一个全局静态变量,该全局静态变量在另外一个线程中会被赋值(赋上屏幕的宽度)。由于线程的异步问题而导致第一次imagewidth是0。后来每次打开软件,并不是进程重启,而是activity重启,imagewidth赋的值还在。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
中导条约是什么意思 南京的事业单位待遇好吗 condition ...个登陆和注册信息的源代码,最简单的就可以,不需要数据库的那种... 个旧附近的vba编程培训机构哪家比较正规? 个旧附近的.Net培训班? 个旧附近的编程培训班? 个旧附近哪里有编程培训在哪里? 湖口哪里可以学电脑电脑技术哪里可以学习 个旧北大青鸟少儿编程培训学费多少? 打错了一个字,怎么用电脑的键盘删除? 163邮箱注册好怎么下载在桌面 要详细的 win7 系统安装一个软件时提示file(s) failed to self-register:C:\windows\system32\msxml2.dll怎么解决? 怎样使用电脑键盘删除控制面板的某个程序. Project : error PRJ0050: 未能注册输出。请尝试启用“每个用户的重定向”,或者用提升的权限从命令提示窗 电脑死机后如何用键盘来强行删除网页? Adobe Flash Player 10无法正常运行 手机roamit提示failedtoregister怎么办? 电脑桌面的图标怎么用键盘删除 flashplayer安装不上,无论安装哪个版都说版本低 安装cad2010会出现Error 1904 module c windows system32 macromed flash flash9.ocx failed to register 如果电脑没有了鼠标,怎么用键盘删除我的电脑里面的文件?按那个键... 用电脑键盘怎么删除东西 安装cimatron10时总是提示 Failed to register CimatronE The CimatronEReg.log file was created 我在安装flashplayer9.0的时候出现了错误,错误说flash9.ocx failed to register(没有注册),该怎么办呀? failed to register ,HRESULT-2147220473.Contact your support personnel.是什么意思呀 pb Runtime 安装失败 提示pbjvm115.dll failed to register windows7下无法用PPC模拟器,打开加载时出现Failed to register. 第二步点启动后出现 无法启动仿真程序, 百家碎戏中涩果中插曲是什么歌 求综漫类的电子书,男主角超级帅,穿越在各种二次元世界的电子书。 WIN7 下安装 install_flash_player_8 出现错误 怎么解决啊1!! 求告诉,.net和前端工程师我该选哪个? 急救啊!我的rational rose 安装时总是出错 Java EE软件工程师 2、Net软件工程师 3、WEB前端工程师这三个专业哪个热门_百度问一问 如何在android上去控制开发进度 我的电脑不知道什么原因杀毒软件不能用了,装不上了,卸载完了也不行,安装到最后一步出现以下内容,高人指点 virtualbox 无法开启ubuntu 萤火虫有哪些? 中国地区分布的萤火虫都有什么种类?分别叫什么? 萤火虫的学名和别名? 萤火虫叫什么名 火虫和萤火虫的区别是什么? 红烧肘子想要入味,有哪些步骤必不可少? 经冰箱冷藏的肉类煮熟后变红色是什么原因? 怎样能让肘子快速入味 卤肘子怎么能够快速的入味? 怎样才能把肘子里外都一个味 自己酱肘子怎么不香呢? 猪肉煮了汤还是红色的 在家炖肘子怎么做入味更快 酱卤小窍门