接下来看下异常启动及问题总结
这个和一般的app启动黑白屏不是一个事情。
1
问题现象:部分功能无法完成,启动异常,一直处于启动中等 还都是偶现的。
原因分析:启动过早的时候,容易出现权限问题,selinux权限问题导致的无文件copy权限,资源文件无法复制到指定位置,
就会导致启动失败 (关键字:deny, denied,FileNotFoundException),而且下次再进来的时候就好了,往往是系统为了优化启动时间,明明没有准备好。。。
解决方案:
1.1 轮询几次
1.2 将文件预置到系统里
2
启动黑屏,冻屏
原因:系统或其他app启动本app方式不对,导致吊起了两个相同的activity运行(但我们是 singleinstence 或singletask的)
由于我们app是系统app,基本上常驻,这样的话,会导致当前的view虽然显示出来的,但处理数据还是给了老的view上面了,用户怎么点击,滑动
都没有反应,就产生了冻屏,如果两次启动间隔很短,又会导致各种时序问题,黑屏,卡死等现象
查看activityrecord 启动log(往往都有对应的对象的id,看下是否同一个对象id),看下启动了几次,也可查看activity生命周期log(但有时候居然只打印一个的生命周期)
解决方案: 系统解决,我们自己的app也要保证异常情况下正常释放资源。
那么多次去掉常用的网上常见的,怎么就这两种情况,太少了
再写个日常频繁问题总结
1 常见问题一般都是页面跳转及生命周期里未处理好导致的
这里加个页面跳转一般是自己写的栈管理,可以加个跳转后的栈信息打印,再加上各个生命周期的log打印,基本上就能解决大部分的问题了。(比如,singletask栈 把上面的页面都清掉了,导致回不去了)
2 消息时序问题,主线程的消息和子线程的消息执行顺序不安预期,消息重复发送(比如,子线程刷新的路线,主线程在处理删除路线流程,主线程执行慢,放到了handler消息队列里,导致先刷新,后删除,用户看到的还是之前的路线)。
3 集合使用不当,需要同步的选了个不支持同步的,删除或修改集合未考虑连续删除索引问题。
比如onDelete()回调里 删除多个路线时候,要使用迭代器或倒叙删除,这个还不够,arrylist又不是线程安全的,如果多次触发ondelete,怎么弄,还要在外层加 synchronized 同步锁。
没了,想到在加