Startup News App源码简单分析 | cfanr

作者:JerryXia | 发表于 , 阅读 (53)
前言很久之前就了解到冯大辉弄的这个Startup News, 有点类似国外Hacker news的技术分享平台,也经常浏览。后来发现Startup News的Android客户端是开源的,而网络上也有很多这种技术资讯的分享平台(如推酷,极客头条等),所以想了解下这样的资讯平台的客户端是怎样实现的,所以就有了以下对Startup News的源码的简单分析和极客头条客户端的开发。
由于个人水平和时间有限,所以只是简单分析了SN的功能如何实现,学习其中实现方法和编程规范,至于SN用到actionbarsherlock,没使用过,而且现在有ToolBar代替,就没有详细了解了。
项目地址:StartupNews
1.编码规范:代码的编码规范很重要,作者有写相关的编码规范文档,可以参考借鉴下:StartupNews编码规范
2.程序入口MyApplication和抽象的常量类ConstantsMyApplication:a.管理应用线程的线程工厂ThreadFactory和线程池ExecutorServiceb.初始化谷歌分析EasyTrackerc.程序崩溃信息收集CrashHandl...阅读全文

设计模式思考III | cfanr

作者:JerryXia | 发表于 , 阅读 (42)
续 设计模式思考 II
思考方式:1.这种模式怎么理解?(尽量简单易懂)2.类图怎样画?(代码怎样写)3.举个栗子?(使用场景)4.使用这种模式有什么优缺点?(遵循什么原则)
##行为型模式
###14.观察者模式(Observer)(1)理解对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
(2)类图

(3)栗子Android的点击事件onClickListener;涉及到数据状态发生变化需要通知的情况下,如邮件订阅和RSS订阅,后续有更新,会及时通知;
(4)优缺点优:目标和观察者间的抽象耦合;支持广播通信
###15.模板方法模式(Template Method)(1)理解一个操作中的算法的骨架,而将一些步骤延迟到子类中,模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 
(2)类图制造咖啡和茶的模板方法:

(3)栗子Android的View的draw方法

适用场景:a.算法或操作遵循相似的逻辑b.重构时(把相同的代码抽取到父类中)c.重要、复杂的算法,核心算法设计为模板算...阅读全文

内存泄露自动探测神器——LeakCanary | cfanr

作者:JerryXia | 发表于 , 阅读 (39)
今天刷微博,发现各位Android开源大神都在转发一条关于Square开源的自动探测内存泄露库LeakCanary的信息。自动探测内存泄露,这也太牛逼了吧!进入@扔物线110 分享的链接了解了下,对原文作简单翻译:(翻译水平有限,凑合看吧-_-)
原文:https://corner.squareup.com/2015/05/leak-canary.htmlLeakCanary开源库地址:https://github.com/square/leakcanary
LeakCanary:探测所有内存泄露!1234java.lang.OutOfMemoryError        at android.graphics.Bitmap.nativeCreate(Bitmap.java:-2)        at android.graphics.Bitmap.createBitmap(Bitmap.java:689)        at com.squareup.ui.SignView.createSignatureBitmap(SignView.java:121)
没有人喜欢OOM错误的...阅读全文

简单了解Android的依赖注入 | cfanr

作者:JerryXia | 发表于 , 阅读 (40)
什么是依赖注入?
首先了解下什么是控制反转?控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。而控制反转有两种,最常见的方式叫做依赖注入(Dependency Injection,简称DI),还有一种方式叫“依赖查找”(Dependency Lookup)。通过控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体,将其所依赖的对象的引用传递给它。也可以说,依赖被注入到对象中。(from wikipedia)
依赖注入的“依赖”就是面向对象中类与类之间的依赖关系。如下面,Animal与Tiger就是依赖关系:12345678class Animal{ Tiger tiger; //…… Animal(){ tiger=new Tiger(); }}
这是一种直接在构造器中初始化的依赖,当然可以通过参数传递的形式,达到依赖注入(通过外部来传入依赖的方式):12345678class Animal{ Tiger tiger; //…… Animal(Tiger tiger){ this...阅读全文

LeakCanary开源项目 | cfanr

作者:JerryXia | 发表于 , 阅读 (35)
Square开源了一个内存泄露自动探测神器——LeakCanary,它是一个Android和Java的内存泄露检测库,可以大幅度减少了开发中遇到的OOM问题,对于开发者来说,无疑是个福音,下面对该库的readme进行简单的翻译:
“A small leak will sink a great ship.” - Benjamin Franklin小漏不补沉大船。——本杰明 富兰克林

##Getting started
在项目的build.gradle文件添加:1234dependencies {  debugCompile 'com.squareup.leakcanary:leakcanary-android:1.3'  releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.3'}
在Application类添加:1234567public class ExampleApplication extends Application {  @Override public void onCreate(...阅读全文