Android漫漫长路上的一些心得

在碌碌的踩坑填坑之后,总要学会聪明一些不是,一定要记得不要一个坑里掉进两次,一定要勇于突破自己的惯性在优秀的人身上发现优点学习优点,结果不一定好但是尝试了才知道

真理和道理很多非常多,难的不是去发现真理,是在茫茫规则中找平衡。

  • 不要轻易的去** 粗暴的 **解决问题,挖的坑多了迟早要还的

  • 开发的测试机尽量用中低端机器,要在开发层面就做好兼容低端机的打算

  • 要有查看GPU呈现模式分析的习惯,不然丢帧等现象堆到一起的时候很难优化

  • 在使用任何第三方框架的时候,请确认:
    1.这个框架是否足够成熟,是否有足够的人踩了足够的坑
    2.是否对程序的性能会有影响(谨慎使用注入框架)
    2.你要功能只是这个框架的多少?

  • SharedPreferences是线程间安全的,但是是进程间不安全的,针对不同数据存储的需求选用不同方式,不要一味的只会使用数据库保存数据,面向对面存储数据真的很方便ObjectSharePreference

  • 如果需要使用Context,区分清楚Application、Activity、Context、Service分别都能做什么事情!对于Application,Service,Activity三者的Context的应用场景如下:


    其中: NO1表示 Application 和 Service 可以启动一个 Activity,不过需要创建一个新的 task 任务队列。而对于 Dialog 而言,只有在 Activity 中才能创建

  • 当前Activity的onPause方法执行结束后才会执行下一个Activity的onCreate方法,所以在onPause方法中不适合做耗时较长的工作,这会影响到页面之间的跳转效率(记得时刻关注程序的性能在哪被消耗了)

  • 一些公共类使用单例可以让代码很大程度解耦,但是不要养成动不动就使用单例粗暴的解决问题(注意对象引用,注意内存泄露)

  • RxJava 可能是 AsyncTasks 以及其它并发业务的最佳替代者

  • Retrofit可能是当前最佳的网络框架解决方案(反正我现在是这么觉得的)

  • 谨慎使用 Lambda来简(装)化(逼)你的代码,真的可读性不是很好啊(当然相当熟悉多人协作的情况下,Lambda优势还是很明显的)

  • 使用事件总线(如:EventBus)能够很好解耦你的代码,但是事件乱飞的情况很难跟踪代码流程!

  • Application中尽量少做事,你真的很清楚Application的生命周期么?
    and 不要在Android的Application对象中缓存数据!

  • 谨慎使用AnimationDrawable或者Gif图片,对内存压力很大的(当然除非你对你的内存把控很自信),那么问题来了:为什么官方没有提供相关的Gif的API调用?

  • 很多项目是按照Class的类别分类的,但是当项目越来越大,有没有发现包的结构十分混乱,当找一个固定类的代价越来越大?@See:包名按照功能来,而不是按分层来;

  • Handler属于 TLS(Thread Local Storage) 变量, 生命周期和 Activity 是不一致的。因此这种实现方式一般很难保证跟 View 或者 Activity 的生命周期保持一致,故很容易导致无法正确释放。推荐使用静态内部类 + WeakReference 这种方式。每次使用前注意判空。
    记录一下JAVA对象的几种引用类型(Strong reference, SoftReference, WeakReference, PhatomReference)

    JAVA对象的几种引用类型

  • 使用AsyncTask的同学请注意了,Anroid中不同API版本的AsyncTask实现不一样,对执行任务的策略是不一样的,@See:调用AsyncTask的excute方法不能立即执行程序的原因分析及改善方案 So,这里就推荐使用RxJava了,虽然学习成本有些大

  • 欲善其事必利其器
    你是真的会用studio么?当然我也不是特别会用╮(╯_╰)╭,推荐几个我觉得好的

  • Android studio lint(代码规范,代码检查),

  • GsonFormat(根据Json生产java bean,和服务器交互不要太快),

  • simpleUMLCE(第三方的IDE插件,能够直接生成类图,很推荐)
    感觉这里可以说的太多,以后补充*

  • 如果你的现有项目是Eclipse工程那么,Eclipse转Android Studio的过程中有必要弄明白的一些问题,你需要了解多一些AS的相关知识

  • 使用 依赖注入 让你的app更模块化,从而更易于测试;
    (dagger2感觉还是很牛逼毕竟是Google出品,但是别问我我也没用过,我只用过简单的Butterknife)

  • 开始考虑用SVG来替代PNG (记得最早SVG出来时淘宝就用的SVG动画做的启动页面,那效果飞起来了,但是现在好像好没有直接把图片转换成SVG的工具(⊙_⊙))

  • 针对不同网络连接情况,制定不同的网络策略,例如:移动连接的时候显示小图,Wifi的时候显示大图,Wifi的时候下载缓存更多东西。

  • 时刻关注大公司在做什么事情,Google就不用说了,这篇文章很有意思国内Top500Android应用分析报告,可以获取的信息量有点大,在这就不班门弄斧了

  • 使用套路开发你的应用,不管是MVP、MVVM,T-MVP,Clean,持续去维护它,去思考去更新它,慢慢的就走上了通往大牛的路上!此记共勉!

  • 节制的使用Service,如果应用程序需要使用Service来执行后台任务的话,只有当任务正在执行的时候才应该让Service运行起来。当启动一个Service时,系统会倾向于将这个Service所依赖的进程进行保留,系统可以在LRUcache当中缓存的进程数量也会减少,导致切换程序的时候耗费更多性能。

  • Android中Touch事件传递


    Touch事件传递

推荐阅读更多精彩内容