重庆建设工程信息网站,网络建设方案ppt,做的比较好的猎头网站,免费加速器永久免费版不用登录一 重写全局异常处理#xff1a; 1 是过滤掉一些已知的无法处理的 问题#xff0c;比如TimeoutException 这种无法根除只能缓解的问题可以直接catch掉 2 是 一些无法继续的问题可以直接杀死重启#xff0c;一些影响不是很大的#xff0c;可以局部还原
比如#xff1a;
p…一 重写全局异常处理 1 是过滤掉一些已知的无法处理的 问题比如TimeoutException 这种无法根除只能缓解的问题可以直接catch掉 2 是 一些无法继续的问题可以直接杀死重启一些影响不是很大的可以局部还原
比如
public class MyUncaughtExceptionHandler implements Thread.UncaughtExceptionHandler {private static final String TAG MyUncaughtExceptionHandler;Overridepublic void uncaughtException(Thread thread, Throwable ex) {ex.printStackTrace();if (null ! thread) {LogUtils.e(killProcess thread name is thread.getName());}LogUtils.e(ex);Log.e(TAG, MyUncaughtExceptionHandler_Exception: Log.getStackTraceString(ex));if (null ! thread FinalizerWatchdogDaemon.equalsIgnoreCase(thread.getName()) ex instanceof TimeoutException) {//https://segmentfault.com/a/1190000019373275 LogUtils.e(FinalizerWatchdogDaemon TimeoutException);} else {LogUtils.e(MyUncaughtExceptionHandler , Crash: ex.getMessage());//Process.killProcess(Process.myPid()); todo}}
}
二 使用工具代码扫描比如sonarlint有新功能的时候可以跑一跑大部分提示都不需要关注。 但是可以自定义一些规则基于本项目容易出错的规则可以配置下比如序列化里面是否都支持序列化是否有new thread的现象
三 增加监控指标内存在一些页面下合理范围是多少线程数的合理范围是多少 查看内存adb shell dumpsys meminfo xxx包名 查看线程数adb shell cat /proc/pid进程号/status 这两个指标多了会影响到内存内存太大就会导致app不稳定。 我曾在自己的项目上跑monkey的时候跑了个脚本监控感觉还是之前的单例太多了当时适当减少了一些单例的生命周期
四 代码质量相关总结 我这里主要分几个部分进行问题总结 1 内存优化及泄露 2 anrnative相关问题总结 3 app启动问题冻屏黑屏总结 4 日常高频问题总结 一分类就很多整完这些就要处理 android相关问题总结java相关问题总结部分尽量分开来别混在一起。 主要以自己以往处理的问题做总结。但感觉这样分类有点不好。因为回忆及查阅自己的资料时候发现既有也有怕是遗漏无法分类的很多哦。 哪有那么多时间 反复查看。头疼 网上能搜到的就不要写了加个关键字链接啥的就过了。 接下来看下泄露吧搞得最多的就是泄露了。
一般的泄露可以直接通过分析hprof文件直接找到这里就不再写写下特殊情况下的
找不到明显泄露的可以直接按照包名分类查看下对应目录下的对象数量按大小排序
一个个过滤会发现一些对象不应该是多个的或一个页面只应该对应两个的里面却出现了三个那一般看下引用堆栈往往能够发现内存异常或回收慢的问题
如果代码比较熟悉可以直接搜相关的对象名字看下对象数量一般可以快速定位泄露问题或
回收慢的问题。
这是个笨方法但对那些出现一次或难复现的问题也是一种方式比如我会保存一些对象的名字
routeoptionpathinfopoiforrequestVariantPathWrapDrivePathAccessor
等这些对象经常容易出问题。
有些对象有个特点当前流程有用且流程分散释放了就出问题留着下次再来的时候容易忘记释放之前的一般我会下次来赋值之前将老的释放掉再赋值给它新的。
有些和业务流程相关的比如绘制看不到对象直接放native了只能代码里监控不能超过500个要及时监控及时释放(clearitems)。