本文是一篇属于Opinionated的文章,只是代表了作者的个人观点,笔者看到Medium有两人发了都是关于最佳实践的Checklist,就把二者集成了下,并且加入了一些个人的看法,基本的知识点分布方式参考了:我的知识体系架构。还是要强调下,本文的观点/评价只是属于个人观点,欢迎讨论。

android-development-some-of-the-best-practices-by-Abderrazak Laanaya

android-development-some-of-the-best-practices-jun-2016-edition-by-Stepan Goncharov

Language:基本的语法

  • 使用任何的第三方库之前都要三思而行,从笔者自己的经验里,抽象漏洞定理是一个颠仆不破的定理啊。虽然很多库宣扬的都是非常Nice,Demo也很诱人,但是你压根不知道它到底会带来怎样的Side Effect。笔者是建议如果真的打算应用某个库到正式的大型项目中,一定要好好考量下它的社区和活跃度。以后流的泪,都是当时脑子进的水。

  • 尽量使用那些较小的,往往只是完成单个功能的库,将来比较好替换。

  • Stepan Goncharov建议使用 Kotlin,可以帮你省掉很多譬如懒加载等等JDK未提供的功能。不过笔者表示持保守态度,毕竟学习成本上来了,就像当年LinkedIn转到Scala一样,谁知道未来会咋样呢?而且Java8,9之后Java本身也在逐步完善,如果真的需要很多附加功能,我觉得Lombok就不错。

  • 给方法命名的时候尽量清晰点,不能随意命名

  • 不要使用Guava

  • 使用Parcel在Android中引入AutoValue

  • FlatBuffers是一个高效地跨平台序列化框架,而Serializable虽然方便使用,但是效率低下

UI

  • 使用Picasso或者Glide来作为图片容器

  • 使用Lint来辅助进行布局与层次优化,这样有助于发现冗余的布局

  • 使用styles来减少布局XML中的重复属性

  • 不要使用层次过深的ViewGroups继承

  • Launch Screen是用户看到的第一个画面,要谨慎,不过也不能在没必要的时候强行加入一个Launch Screen

  • 使用ConstraintsLayout来扁平化视图层次

  • 使用数据绑定来减少UI代码的数目

  • 避免在AsyncCallback以及静态对象中引用View,并且避免将View放入没有明确的内存模式的集合中,可以考虑放到WeakHashMap中

Network

  • 不要尝试着重复造轮子,可以使用Volley或者OkHTTP,可以考虑使用Retrofit作为上层封装

  • 记得监控当前连接类型,在Wifi下进行较大量的数据更新

Storage

  • 使用AccountManager来建议登录名与Email地址等

DataBase

  • 除非确实有必要,否则不要盲目的引入数据库支持。这一点笔者也是赞同的,很多时候简单的缓存可以用SharedReference就可以了。不过反过来,如果你真的有一定的需要持久化的数据,不要犹豫,立马引入数据库的支持

  • 如果引入了DB支持,那考虑使用ORM框架的支持,避免重复造轮子

  • 关于Realm,这是一个很炫的东西,但是笔者自己老实说在Android和iOS平台引入之后,发现还是会存在一些问题Abderrazak Laanaya对Realm是持积极态度而Stepan Goncharov是保守态度。笔者自己的感觉是Realm确实很酷,但是一定要做好其引发未知Crash的心理准备

SysProc

  • 使用RxJava来代替AsyncTasks,不过对于RetroLambda的使用还是持保留意见

  • 对于Event Bus的使用持谨慎态度,一不小心就可能把你的程序变得有些杂乱,可以考虑使用RxJava+

LocalBroadcastManager作为替代

  • 不要把太多东西塞入到Application线程中

  • 使用JobScheduler来处理长期周期化运行的无状态任务

  • 在应用程序中要注意避免Memory Leaks,不过onLowMemory()是会在整个系统的内存较低的情况下被触发,因此不能用于避免OOMs

  • 系统的30%的电量消耗用在了图片、动画等,而70%用于分析、广告、地图以及GPS

TestRelease

  • 现在的应用程序很容易突破65K的方法数量的限制,Multidexing可以帮你解决这个问题

  • 应该按照Feature打包,而不应该按照Layers打包

  • 使用Gradle以及其推荐的项目结构,并且将密码以及其他关键数据放置到gradle.properties中

  • 将应用分为多个较小灵活地模块中,这样可以尽量保证可维护性较好、耦合度较低的CodeBase,也可以选择将小的模块发布到公开或者私有的仓库中,然后在主项目中引入。

  • 使用如下的表达式来过滤日志:


^(?!(NotificationManager|Timeline|SensorManager|Configs|libc-netbsd|art|stetho|Choreographer|CliptrayUtils|BubblePopupHelper|ViewRootImpl|libEGL|System.out|PhoneWindow))
  • 在CI工具里添加些静态的代码分析工具

  • 开发的时候设置minSdkVersion=21,这样可以加速编译时间,特别是在设置了Multidexing的时候

  • 使用Stetho来方便调试应用

2016里一些Android最佳实践列表——Opinionated相关推荐

  1. fir.im Weekly - 2016 年 Android 最佳实践列表

    2016 年已经过去一半,你在年初制定的成长计划都实现了吗? 学海无涯,技术成长不是一簇而就的事情.本期 fir.im Weekly 推荐 王下邀月熊_Chevalier的 我的编程之路--知识管理与 ...

  2. android系统功耗优化(2)---Android最佳实践之性能 - 电池续航时间优化

    Android最佳实践之性能 - 电池续航时间优化 Doze和App Standby的优化(API23) 参考地址:http://developer.android.com/training/moni ...

  3. 东网科技荣膺2016中国大数据最佳实践奖

    11月24日,由中国软件网主办的数据趴活动圆满落幕,活动现场隆重揭晓了大数据领域的重磅榜单,旨在对大数据领域中表现突出的企业.人物进行表彰.东网科技有限公司(以下简称"东网科技") ...

  4. Android 最佳实践

    Android 最佳实践 此篇文章主要用来记录一些在日常Android开发中比较好用的一些库或者方法 1:TextView相关 通用TextView的封装:https://github.com/lyg ...

  5. Android最佳实践之性能 - 电池续航时间优化

    Doze和App Standby的优化(API23) 参考地址:http://developer.android.com/training/monitoring-device-state/doze-s ...

  6. android最佳实践:网络 电池 压缩

    翻译此篇文章,总共加起来有6个小时.有些英文长句,里面包含的各种从句,需要借助翻译软件才勉强理解,但是其实文章中还是会有大量不是特别流畅的语言,有两个地方需要提高,一是写作的语言组织表达能力.二是一个 ...

  7. Android最佳实践之UI

    为多屏设计(一) - 支持多个屏幕尺寸 参考地址:http://developer.android.com/training/multiscreen/index.html Android UI设计提供 ...

  8. [转]Android最佳实践之:StrictMode介绍

    [IT168技术]最新的Android平台中(Android 2.3起),新增加了一个新的类,叫StrictMode(android.os.StrictMode).这个类可以用来帮助开发者改进他们编写 ...

  9. android 最佳实践,Android开发最佳实践(四)

    大多数时候,侧滑菜单都是从左到右滑出的,但是我们也可以做到从右往左滑出,只需要在DrawerLayout的菜单布局LinearLayout里面修改一下margin的相关属性即可: 9)Tabs and ...

最新文章

  1. sed 每次只替换一行
  2. Xcode 6 UITextField 键盘不弹出
  3. 远程连接——Windows远程连接CentOS远程桌面
  4. Node.js之HTPP URL
  5. SpringBoot解决redirect参数中文乱码问题
  6. 终于有人把数据湖讲明白了
  7. .net framework 4.0 安装失败解决办法
  8. 微信小程序黑客马拉松即将开始,来做最酷的 Mini Program Creators! 1
  9. python编写登录_通过Python编写一个简单登录功能过程解析
  10. rails3 Route用法
  11. 二十四、通过用户模型,对数据库进行增删改查操作
  12. typora字体颜色及字体背景颜色快捷方式(亲测实用有效)
  13. 如何设置迪文DGUS屏的字体效果?
  14. 2020互联网公司中秋礼盒大比拼(22家互联网厂商)
  15. 如何设计出一款好的软件
  16. c语言中各个符号的意义及作用是什么,C语言各类符号意义以及用法是什么?
  17. 【光学】基于matlab相互垂直的光波叠加仿真【含Matlab源码 2071期】
  18. 【评测】MP SARS-CoV-2单抗、重组蛋白
  19. 学习Maya学习MayaArnoldArnold
  20. 什么是分布式事务Seata?Seata的几种事务模式详解

热门文章

  1. Springboot旅游网站管理系统毕业设计、Springboot旅游线路和景点网站设计与实现 毕设作品参考
  2. Quartz.基本使用
  3. 小球酷跑unity制作
  4. leetcode-java-乐团站位
  5. DISPLAY(3)——RK3399 双路mipi拼接屏+HDMI 三屏显示
  6. 基于STM32实现W25Q16读写操作(spi)
  7. 【linux kernel】linux内核如何挂载根文件系统
  8. 实现kep与数据库连接,在kep上修改数据库
  9. mybase导出html,myBase Desktop
  10. C++练习17:统计字符串中有多少个单词