一个android日志库的实现

调研

在android开发中,如果需要打印调试信息,往往会使用Log.d()、Log.e()之类的由android.util.Log提供的方法。它的好处是简单、方便,不足也很明显,可定制性差,不能打印到文件。如果想在发行版app中的某些关键语句打印log到文件,或者在app崩溃时把崩溃信息打印到文件供上传分析,那么android.util.Log就无能为力了。

FlatBuffers学习总结

据说facebook使用google的黑科技flatbuffers,用来替代传统的json进行数据交换,大大提高了facebook android客户端的效率。于是我在网上查找各种资料学习了一下flatbuffers,参看资料包括GOOGLE官方文档、facebook技术博客、以及其他国内的个人博客,也写了些代码做实验,以此文作为学习总结。

什么是Google FlatBuffers

FlatBuffers是一个开源的、跨平台的、高效的、提供了C++/Java接口的序列化工具库。它是Google专门为游戏开发或其他性能敏感的应用程序需求而创建。尤其更适用于移动平台,这些平台上内存大小及带宽相比桌面系统都是受限的,而应用程序比如游戏又有更高的性能要求。它将序列化数据存储在缓存中,这些数据既可以存储在文件中,又可以通过网络原样传输,而不需要任何解析开销。

Android编程要注意的安全规范

这两天阅读了一下android developer网站与安全相关的部分,对android编程过程中主要注意的安全细节进行了学习,在此总结一下要点。

Android框架自身的安全性机制

  1. Android应用程序沙盒,把每个app的数据与代码都分隔开。
  2. 对各种安全功能进行了强健实现的应用程序框架,如密码学、权限、安全IPC等。
  3. 加密的文件系统,它能够保护丢失或被盗设备的数据。
  4. 用户能够授权权限来限制对系统和用户数据的访问。
  5. 应用程序定义的权限。

《Think in Java》类型信息 – 学习笔记

Class对象

Class对象是一种特殊的对象,它包含了与类有关的信息。Class对象用来创建类的所有的“常规”对象。Java使用Class对象来执行RTTI(包括类型转换操作)。
每当编写并编译一个新类,就会产生一个Class对象(或者说被保存在一个同名的.class文件中)。

Class对象的引用可以通过Class.forName()或普通对象的getClass()方法来获取,或类名加上.class来获得。其中,getClass()方法属于根类Object的一部分。”.class”称为类字面常量,他在编译时就会受到检查,所以更安全,也更高效。

差别:“.class”不会引起类的初始化,而Class.forName()方法会立即就进行初始化。

Otto学习笔记

与EventBus类似的还有otto,于是也学习了一下。在网上找到的大部分博客其实都是对otto官方文档的中文翻译,对生产者的@Produce、PUBLISHING、PRODUCING之间的关系讲得比较模糊,也没有对EventBus的StickyEvnet与Otto中类似机制的对比,而这正是我想了解的。于是就自己写demo实验,以此文总结。


本文的Otto指的是:square/otto
EventBus指的是:greenrobot/EventBus
Github上有很多同名项目,不要搞错。

本文档前面是对Otto各方面的介绍。如果要学习快速使用,可以直接跳转到后面的详细使用实例部分。

特点

Otto的作用与EventBus类似,都是用于组件间通信,降低不同的类相互之间的耦合。如果不熟悉EventBus,可以先了解EventBus,下文涉及到otto与EventBus的对比。

Otto可以随便定义订阅者的消息处理函数的函数名,采用注解的方式来识别生产函数和消费函数(@Produce和@Subscribe),这是与EventBus明显的不同。

EventBus学习总结

这两天对Github上很火的Eventbus进行了学习,查阅了一些博客,写代码做了实验,以此文总结。
本文档前面是对EventBus各方面的介绍。如果要学习快速使用,可以直接跳转到后面的详细使用实例部分。

本文EventBus指的是:greenrobot/EventBus
Github上有很多同名项目,不要搞错。

EventBus是使用观察者模式来替代Intent、Handler、Broadcast的在Activity、Fragment、Service之间传递消息的机制。能降低组件间的耦合,使代码更简洁。

概念图

EventBus概念图

《Think in Java》并发 - 学习笔记

1.Executor允许你管理异步任务的执行,而无须显示地管理线程的生命周期。Executor在Java SE5/6中是启动任务的优选方法。可以使用Executor来代替显示地创建Thread对象。

2.ExecutorService知道如何构建恰当的上下文来执行Runnable对象。

3.CachedThreadPool在程序执行过程中通常会创建与所需数量相同的线程,然后再它回收旧线程时停止创建新线程,因此它是合理的Executor的首选。只有当这种方式会引发问题时,才需要切换到FixedThreadPool。