本文同步自我是一只香脆的大鸡排程序员
有同窗问我,对应用开发你有没有值得注意或小技巧的地方能够分享的。好比适配、优化、排查错误什么的。鸡排把本身的总结笔记整理出来了。供你们参考。api
在项目业务代码开工以前,最好把这些问题都解决掉,不然必将酿成大祸害。它们是:网络
特定的机型上出问题时,别着急。咱们能够尝试如下几个办法。架构
1.若是app在调试的过程当中出现闪退,此时在logcat下日志会被新起来的进程冲刷掉。这时须要把过滤器选择为No filter 把日志级别选为 error便可查看到上一次崩溃的日志。app
2.有一种状况是手机并不在咱们身边,咱们也没法使用调试工具。此时能够接入一些第三方的日志记录工具。在开发状态下不建议使用友盟 360之类sdk,由于颇有可能咱们的app根本没法链接到网络就崩溃了。 能够选择把日志存到本地文件中。再由使用手机的人发回来。通常这我的是测试。异步
3.若是app未接入任何日志保存工具,能够在data/anr/目录下查看到全部的ANR异常信息。但须要su权限。不然没法访问到。工具
1.素材有必要使用压缩后的。推荐熊猫PNG压缩。组件化
2.资源能用代码画尽可能使用代码去画,而不要使用静态资源。布局
3.在复杂的布局上,好比不少app的首页须要加载不一样类型的item。使用了RecyclerView多类型加载,刷新数据时必定要使用单独对item刷新api。切勿使用notifyDataSetChanged()
方法,这里要用两个参数的notifyItemChanged(1,"gfg")
方法。性能
4.数据懒加载,或排队加载。
5.混淆可使包减少含:(xml 资源 class等)
6.若是玩得不是很6,尽可能不要写静态引用,匿名内部类这种会致使内存泄漏的东西。若是很担忧本身失误的写了,必定要去分析它们,把他们揪出来。
7.Activity的层级不要太深。过深的层级会在低内存设备上被回收栈底的Activity。
1.发现某处代码能够复用性的封装一下或者改良一下会更好的时候必定要乘早,不要拖延。(烂泥巴只会愈来愈烂,后面改=永远没可能)
2.debug编译期间能够把用不到的abi过滤掉,会让咱们加速部署。
3.尽可能保持较新的 support library依赖。由于较高的版本中修复了一些bug。
4.接入第三方包时,最好与自身模块保持独立,作到随时解耦,随便复用。
5.多个native库依赖时,若发现某些abi上不支持,那么就须要保持最小的abi。不然会给某些机型优先读取它更合适的架构。会形成灾难性的崩溃。如:ARM文件夹中含两个so,ARMv8中只有一个。届时手机优先加载了ARMV8的状况下,将带来找不到so库的崩溃异常。
6.不要太随性的引入第三方依赖库,若是只是用了很小一部分功能,建议剥出来本身封装。
7.第三方的包含私有api为暴露时,记得用反射去实现。固然这一切须要咱们能翻他们的sdk源码读。也许被混淆了。这时就可使用动态调试去跟踪。
8.多数状况下官方的support包比第三方要好得多。只是咱们不知道,或者不熟悉。
9.渐变图、纯色图、带一根线的图用shape,不要静态图。会引起血案!
10.当没法经过搜索解决问题的时候,读源码是最快的解决思路。千万不要瞎猜和尝试随缘写代码来解决问题。
11.封装控件时注意对资源类型作校验 如:image.setImageResource(img);
这里的img须要作强校验,类型检测,防止别人用的时候不当心写错了。由于若是咱们不主动抛出异常。靠LayoutInflater经过反射去解析xml时提示出了的错误日志很是难看。通常还会伴随一大堆调用栈和闪退出现。
12.冷启动优化,不要在Application启动时里作过多的任务&第一个Activity里也是同样。最好把初始化的白屏Window设上一张图片过渡一下。
有不妥之处,欢迎指出和补充,拼死挣扎的Android程序员。