项目中一个Bug的解决过程
2017-10-09 18:00
246 查看
A 和 B 是两个不相关的页面,在B页面做FaceBook直播:
step1: 直播过程中,页面B,app退到后台,app到后台的那一刻会显示页面C,倒计时30s
step2: 从后台到前台,页面C仍然在倒计时(30s内)
step3: 暂停直播,去到页面A,此时页面B已经执行deinit
step4: 在页面A中,进行OTA升级
step5: 升级过程中,App退到后台(理论上这里iOS会截一张当前界面图D,下面会讲原因)
step6: 从后台再到前台,出现了bug,手机app界面显示的是页面C,而不是界面图D?
这就很奇怪了,为什么会显示界面D呢。搞的好像我们页面没释放一样,但是,我们的deinit确实执行了?
先说明下,我们的页面确实释放了,这个问题出现的原因也已经找到,先说下app从前台到后台时,iOS takes a screen shot of your application before throwing it into the background.在App到前台的时候,再显示那张图片。
那么为什么我在升级页面显示的是不对的呢?
这个真的是好坑啊,在升级页面A当收到UIApplicationWillResignActive这个通知时,调用了一个封装好的API,在这里面sleep了三秒钟,那么当我在三秒钟内,由后台回到前台(这里是点击App icon到前台,而不是双按home键,然后选择App页面这种操作到前台),iOS系统还没有截图成功呢,那样就会显示系统的Sandbox的Library\Caches\Snapshots\xxxx..中已经存在的之前的截图C!
为了解这个bug,请问您有几种思路?
method 1. 我尝试删除这里面的已经存在的这张截图,但是,这是不行的,这里的东西是无法删除的,所以不要白费功夫了。
method 2. 既然那个方法阻碍了我的截图,那我可以不可以先截图完了,在执行这个方法呢,当然是可以的,API你又不能改,只能自己这边改动了。所以,我就在这里把API的方法延时了一下,至于为什么是0.3,这个是经验值,测试了不同的手机和系统版本后得出的:
DispatchQueue.main.asyncAfter(deadline: .now() + 0.3) {
…
}
这样,这个bug就结了。
给两个个链接看下:
https://stackoverflow.com/questions/7520076/prevent-ios-from-taking-screen-capture-of-app-before-going-into-background
https://stackoverflow.com/questions/20928106/ios-app-launch-image-after-a-kill
step1: 直播过程中,页面B,app退到后台,app到后台的那一刻会显示页面C,倒计时30s
step2: 从后台到前台,页面C仍然在倒计时(30s内)
step3: 暂停直播,去到页面A,此时页面B已经执行deinit
step4: 在页面A中,进行OTA升级
step5: 升级过程中,App退到后台(理论上这里iOS会截一张当前界面图D,下面会讲原因)
step6: 从后台再到前台,出现了bug,手机app界面显示的是页面C,而不是界面图D?
这就很奇怪了,为什么会显示界面D呢。搞的好像我们页面没释放一样,但是,我们的deinit确实执行了?
先说明下,我们的页面确实释放了,这个问题出现的原因也已经找到,先说下app从前台到后台时,iOS takes a screen shot of your application before throwing it into the background.在App到前台的时候,再显示那张图片。
那么为什么我在升级页面显示的是不对的呢?
这个真的是好坑啊,在升级页面A当收到UIApplicationWillResignActive这个通知时,调用了一个封装好的API,在这里面sleep了三秒钟,那么当我在三秒钟内,由后台回到前台(这里是点击App icon到前台,而不是双按home键,然后选择App页面这种操作到前台),iOS系统还没有截图成功呢,那样就会显示系统的Sandbox的Library\Caches\Snapshots\xxxx..中已经存在的之前的截图C!
为了解这个bug,请问您有几种思路?
method 1. 我尝试删除这里面的已经存在的这张截图,但是,这是不行的,这里的东西是无法删除的,所以不要白费功夫了。
method 2. 既然那个方法阻碍了我的截图,那我可以不可以先截图完了,在执行这个方法呢,当然是可以的,API你又不能改,只能自己这边改动了。所以,我就在这里把API的方法延时了一下,至于为什么是0.3,这个是经验值,测试了不同的手机和系统版本后得出的:
DispatchQueue.main.asyncAfter(deadline: .now() + 0.3) {
…
}
这样,这个bug就结了。
给两个个链接看下:
https://stackoverflow.com/questions/7520076/prevent-ios-from-taking-screen-capture-of-app-before-going-into-background
https://stackoverflow.com/questions/20928106/ios-app-launch-image-after-a-kill
相关文章推荐
- 一个新手接触手游项目碰到的bug及解决过程汇总2
- 一个新手接触手游项目碰到的bug及解决过程汇总
- 一个小BUG的解决过程。
- XX省移动CMNET三期扩容项目遇到IPMP BUG解决过程
- eclipse maven创建一个maven web项目,以及创建过程中的报错解决方法
- springmvc项目搭建过程中遇到的BUG及其解决方法
- 写项目的过程,遇见的BUG,如何解决的
- 一个长时间parse的bug解决过程
- 一直以来我(每个从事linux开发的人)深受“bug”的困扰,好像“bug”不足以描述这种被问题困扰的无奈。因为当在驱动或BSP的开发过程中,所碰到的问题比解决一个bug难得多。 Li
- 一个疑难bug的解决过程
- android一个下拉放大库bug的解决过程及思考
- ionic3内容置顶按钮,在csdn一个demo基础上修改的,解决按钮在过渡过程中忽隐忽现的bug...
- 一个bug的解决过程
- 开源项目XRecyclerView的一个bug的解决
- 一个关于 ie 浏览器的 bug 解决过程和思考
- 记录一个前端bug的解决过程
- 一个解决过程:Servlet [某路径xxx] in web application [/项目xxx] threw load() exception和java.lang.ClassNotFoundException XXX
- android studio 开发过程中怎么解决同一个项目下,两module之间的相互访问
- 项目调试时候,出现其中用到的一个组件“访问被拒绝”的解决方法(.net的一个BUG)
- 记一个疑难bug的解决过程