贾小昆的个人网站

贾小昆的个人网站

Jaqen's Personal Website

Android setContentView,Window,PhoneWindow and DecorView
从 Activity 的 setContentView(R.layout.activity_main) 开始。 1234public void setContentView(@LayoutRes int layoutResID) { getWindow().setContentView(layoutResID); initWindowDecorActionBar();} 这里调用了 getWindow().setContentView 方法,那这个 getWindow() 是什么呢? 1234567891011/** * Retrieve the curr...
《禅与摩托车维修艺术》摘录
1. 我们夫妻俩和一些老友迷上这种乡间小路已经有好些年了。当初为了调剂一下或是为了去另一条干道而走捷径,都不免要骑上一段。每次我们都会惊讶于景色的美丽,骑回原路时便有一种轻松愉悦的感觉。我们经常这么骑,后来才明白道理其实很简单:这些乡间小路和一般的干道迥然不同,就连沿线居住的居民的生活步调和个性也不一样。他们一直都没有离开过本地,所以可以很悠闲地和你寒暄问候、谈天说地,那感觉好极了。反而是那些早就搬到城市里的人和他们的子子孙孙迷失了,忘记了这种情怀。这实在是一个宝贵的发现。我在想,为什么我们这么久之后才会对其着迷。我们早已看过却仿佛没有看到,或者说是环境使我们视而不见,蒙骗了我们,让我们...
Android Handler 消息处理机制
日常开发中,一般不会在子线程中直接进行 UI 操作,大部分采取的办法是创建 Message 对象,然后借助 Handler 发送出去,再在 Handler 的 handlerMessage() 方法中获取 Message 对象,进行一系列的 UI 操作。Handler 负责发送 Message, 又负责处理 Message, 其中经历了什么 ,需要从源码中一探究竟。 首先看 Handler 的构造函数: 12345678910111213141516171819public Handler(Callback callback, boolean async) { if (FIN...
Android 多进程基本知识整理
在 Android 中,一个应用默认有一个进程。但我们可以通过配置实现在一个应用中开启多个进程。 开启多进程方式 在清单文件中指定 android:process 属性 适用元素:Activity,Service,Receiver,ContentProvider。 以: 开头,表示这个进程是应用的私有进程;以小写字母开头,表示这个进程是全局进程,可以被多个应用公用。 123456<activity android:name=".SecondActivity" android:process=":second" /><activity android:...
Android 编码规范
简单总结了 Android 开发中的一些代码规范,供开发者参考。 0 Index 1 命名规范 2 注释规范 3 格式规范 4 参考资料 1 命名规范大驼峰命名(UpperCamelCase):每个单词的第一个字母都大写。 小驼峰命名(lowerCamelCase):除第一个单词以外,每一个单词的第一个字母大写。 命名的基本原则: 不能以下划线或美元符号开始,也不能以下划线或美元符号结束。 严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式。但比如 shanghai 等通用的名称,可视同英文。 除了常见的英文缩写,尽量避免缩写。 1.1 类 / 接口命名 使用大驼峰命名法,...
Android Intent 传递自定义对象
Intent 可以用来启动活动、发送广播、启动服务等,通过 putExtra 方法可以添加一些附加数据,达到传值的效果,但若想传递自定义对象的时候就无能为力了。 可以通过使用 Serializable 接口、Parcelable 接口以及转换对象为字符串的方式进行传递。 1、Serializable 表示将一个对象转为字节实现可存储或可传输的状态,一个对象能够序列化的前提是实现 Serializable 接口。 Model: 123456789101112public class Person implements Serializable { private Strin...
同步、异步、回调及观察者模式
1、同步调用同步调用是最基本的调用方式,即类 A 的方法 a() 调用类 B 的方法 b(),一直等待方法 b() 执行结束,方法 a() 才继续往下走。这是一种阻塞调用, 适用于方法 b() 执行时间不长的情况,如果方法 b() 执行时间过长或者直接阻塞的话,方法 a() 的余下代码是无法执行下去的。 2、异步调用异步调用是为了解决同步调用存在阻塞情况而产生的一种调用方式。类 A 的方法 a() 通过创建新线程的方式调用类 B 的方法 b(),代码接着直接往下执行。这样方法 b() 在新线程中执行,就不会阻塞方法 a() 的执行。对于方法 a() 无需方法 b() 的返回结果,可以直接...
Android 屏幕适配笔记
基本概念 in 英寸,手机屏幕的物理尺寸。1 英寸等于 2.54cm。如果说手机屏幕是 5 寸,表示手机屏幕对角线长度为 5X2.54=12.7cm。 px 像素,英文单词 pixel 的缩写,屏幕上的点。常见的分辨率 320x480、480x800、720x1280、1080x1920 指的就是像素。 dpi 每英寸包含的像素个数,dots per inch 的缩写。比如 320X480 分辨率的手机,宽 2 英寸,高 3 英寸, 每英寸包含的像素点的数量为 320/2=160dpi(横向)或480/3=160dpi(纵向),160就是这部手机的dpi。 density ...
设计模式之工厂方法模式
简单工厂模式提供了专门的工厂类用于创建对象,实现了对象的创建和使用分离。但工厂类集中了所有产品对象的创建逻辑,职责过重;此外,如果增加新产品,需要修改工厂类的源代码,违背开闭原则。 工厂方法模式则可以很好的解决这一问题。在工厂方法模式中,不在提供统一的工厂类创建所有的产品对象,而是针对不同的产品提高不同的工厂。 模式结构图如下: 共包含以下 4 个角色: Product:定义产品的接口。也就是产品对象的公共父类。 ConcreteProduct:具体产品类,与具体工厂一一对应。 Factory:抽象工厂接口。它是工厂方法模式的核心。 ConcreteFactory:具体工厂类,返回一...
Chrome 插件推荐
近些年来,在众多浏览器大战中,Google 的 Chrome 浏览器的市场份额位居首位,而且依然呈现高速增长趋势。Chrome 浏览器的优点不必多言,谁用谁知道。 这里主要推荐本人常用的 Chrome 插件,能够帮助你更加便捷高效的使用 Chrome 浏览器。 1、Checker Plus for Gmail™ 这个插件的强大之处在于你无需打开 Gmail ,即可收到桌面邮件通知,方便地查看、撰写或删除邮件。 2、划词翻译 支持谷歌、百度、有道、必应四大翻译和朗读引擎,可以方便的查看、复制和朗读不同引擎的翻译结果。再也不用担心读不懂英文资料了。 3、OneTab 在 chrome ...
avatar
贾小昆