2018-08-01
基金数据爬虫

购买基金可以参考一个法则: 最近一年、两年、三年、五年及成立以来收益率排名同类基金的前1/4 最近三个月、六个月收益率排名同类基金的前1/3笔者实现了一个应用,依据上述法则筛选基金,降低广大基民踩雷的风险。本应用包含数据爬虫、数据存储和数据展示三个模块。本应用并没有采用传统的SQL作为数据库存储,而是直接利用...

 2017-12-25
Android Context的设计思想和源码分析

做了好些年Android,终于可以聊一聊既熟悉又陌生的Context了,每个刚入门的Android开发人员都会接触到它;然而要读懂Context的设计哲学,却又要经过好多轮的认知升级。很多时候,大家是感知不到Context的存在的,笔者最开始“被迫”使用Context,是在自定义控件的时候,布局中有一个按钮,点击一次就发送一次广播,其代码片段如下所示:

 2017-01-04
Android包管理机制

1 概要每一个社会群落都有管理机制,其中有三个要素:被管理者、管理者以及管理机制的运转。在Android的世界中,有一处群落叫“包管理”,要研究Android的包管理机制,同样可以从以下几个角度来思考: 被管理的对象是什么? 管理者的职能是什么? 管理机制是如何运转的?所谓包,其实就是一种文件格式,譬如AP...

 2016-10-23
Android四大组件之Activity--启动过程(下)

Activity的启动过程(上)一文中,我们介绍了Activity启动过程的上半部分, 按照Activity的启动时序,涉及内容到多达11个函数,最终落脚点在创建一个应用进程。Activity启动过程的上半部分都还是在系统进程中完成,是系统进程内部数据结构和状态的调整。本文分析Activity启动过程的下半部分,涉及到系统进程和应用进程的通信,建议读者先读完应用进程与系统进程的通信,了解两个进程的通信方式。

 2016-07-29
Android四大组件之Activity--启动过程(上)

Activity的启动过程涉及到的逻辑非常庞大,很难做到单点突破,建议读者在读本文之前,把Activity的四种启动模式ActivityManagerService的启动过程Activity的管理方式都再读一遍,储存一些背景知识。也是由于内容太多,笔者把启动过程分为上、下两部分介绍,另外一部分在Activity的启动过程(下)一文中。

 2016-07-15
ActivityManagerService的启动过程

1. 概览ActivitityManagerService(下文简称AMS)作为系统中最重要的服务,在开机时就会被启动,而且一直存在。那么,Android是如何启动AMS,以及启动AMS时做了哪些初始化工作呢?从进入Android系统进程(SystemServer)到用户所见的桌面(HomeActivity),整...

 2016-06-12
一种Android多分支的自动合并方案

1. 背景对于Android系统级开发人员而言,维护多个分支的代码是常态,尤其是当新的Android版本发布时,设备厂商更是苦不堪言,即疲于最新Android版本的适配,又苦于大量旧机型的维护。为了尽可能的减少维护的工作量,设备厂商有很多手段来避免新增分支,譬如: 编译时过滤。通过编译开关来兼容代码差异...

 2016-02-01
Android四大组件之Activity--管理方式

1. 概览Activity的管理有静态和动态两层涵义: 静态是指Activity的代码组织结构,即Application中声明的Activity的集合,这些Activity被组织在一个APK中,有特定的包名。在编写应用程序时,Activity对应到用户界面,它定义了用户界面的布局、交互行为、启动方式等,...

 2016-01-29
Android四大组件之Activity--应用进程与系统进程的通信

Android中有一个系统进程(system_process,在Lollipop之前,叫system_server),运行着系统的重要服务(AMS, PMS, WMS), 针对Activity而言,系统进程需要不断地调度Activity执行,管理Activity的状态; 每一个APK都需要运行在一个应用进程中,有自己独立的内存空间, 针对Activity而言,应用进程需要执行Activity生命周期函数(onCreate, onStart, …onDestroy)的具体逻辑。

 2015-12-05
静态代码检查工具--Klocwork

1. 前言 全球前5位的智能手机公司就有4个在使用Klocwork 全球前7位的芯片制造商就有5个在使用Klocwork 全球前10位的通讯设备制造商就有8个在使用Klocwork 美国前7位的航空与国防企业就有5个在使用Klocwork 全球前10位的医疗设备企业就有7个在使用Klocwork初识Kl...

 2015-11-04
StrictMode机制以及使用场景

1. 概览StrictMode,严苛模式,是Android提供的一种运行时检测机制,用于检测代码运行时的一些不规范的操作,最常见的场景是用于发现主线程的IO操作。StrictMode包含两个维度的概念: Policy(策略): 是指StrictMode对一些违规操作的发现策略,分为两类:一类是针对一个具...

 2015-10-12
Watchdog机制以及问题分析

1. 概览Watchdog的中文的“看门狗”,有保护的意思。最早引入Watchdog是在单片机系统中,由于单片机的工作环境容易受到外界磁场的干扰,导致程序“跑飞”,造成整个系统无法正常工作,因此,引入了一个“看门狗”,对单片机的运行状态进行实时监测,针对运行故障做一些保护处理,譬如让系统重启。这种Watchdog...

 2015-10-12
ANR机制以及问题分析

1. 概览ANR(Application Not Responding),应用程序无响应,简单一个定义,却涵盖了很多Android系统的设计思想。首先,ANR属于应用程序的范畴,这不同于SNR(System Not Respoding),SNR反映的问题是系统进程(system_server)失去了响应能力,而A...

 2015-08-30
AOSP代码管理

1. 概要与大部分设备厂商一样,Google也面临着AOSP(Android Open Source Project)多分支的管理问题,AOSP需要使用多个分支来维护不同的Android版本,设备厂商除了要接受Android版本的不同分支,还要使用更多的分支来处理不同设备之间的差异。维护多个分支始终是一项繁重的任...

 2015-08-08
编译系统(1)-概览

1. 概要编译,就是将高级语言转换成机器语言。譬如,通过gcc将C语言编译成可以运行的二进制;通过javac将Java语言编译成可以在Java虚拟机上可以运行的字节码。对于简单的项目,源文件数量较少,通常只需要几条命令,组织一下源文件,调用一下编译器,生成一个可以运行的文件,就算是一个“编译系统”; 但对于大型的...

 2015-07-19
dumpsys介绍

1. 概要dumpsys是Android提供的系统工具,可以用来查看所有系统服务的信息。在命令行输入如下命令,就可以罗列出当前所有的系统服务名:$ adb shell dumpsys -lCurrently running services: ... SurfaceFlinger ... activity...

 2015-06-25
Repo介绍

阅读本文之前,需要对git有一定的了解。1. 概要repo是Android为了方便管理多个git库而开发的Python脚本。repo的出现,并非为了取代git,而是为了让Android开发者更为有效的利用git。Android源码包含数百个git库,仅仅是下载这么多git库就是一项繁重的任务,所以在下载源码时,A...

 2015-05-21
adb介绍

1. 概要Android Debug Bridge(adb)是一个Android的命令行工具,可以用来连接模拟器或实际的移动设备。做过Android开发的朋友一定对adb logcat, adb shell命令不陌生,Dalvik Debug Monitor Server(DDMS)后台也是运行的adb来实现监控...

 2014-12-25
UML关联、聚合、组合关系的区别

概要本文介绍面向对象编程中,实体对象之间的相互依赖关系,包括:关联、聚合、组成和继承关系。虽然已经有很多文章,介绍这几种关系之间的区别,但仍有一些开发人员对这几种关系的理解存在困惑。有时候,这几种依赖关系之间的界定,从代码结构上并不好区分,更多的是需要从语义的角度来理解。笔者试图从面向对象的使用场景,来说明这些关...

 2014-03-10
晨记

晨记

人言酒,风入松。

酒意酣,趣意浓。

夜未央,绕指香。

岁流长,丫慢点喝。

今起时,雾满都。

遮了树,迷了路。

二零一四年三月十日 虎门大桥

 2013-07-17
盛夏小记

盛夏小记

细水蓝流,流到何年方始休?

渔船鼓浪,浪倚孤影声悠悠。

来轸方遒,此经落拓路依旧。

莫叹去留,情到深处无怨尤。

二零一三年四月十七日 香港

 2011-11-11
晚秋小记

晚秋小记

银杏飘零,抹得几缕夕阳?

浮光掠影,岂知荡气回肠。

凌霜泻地,不尽世间炎凉。

席间对饮,但话一曲家常。

二零一一年十一月十一日 西二旗

 2011-04-07
晚春小记

晚春小记

日趋千里,奈何人生如寄?

追叙往昔,感慨理想依稀。

漫步凌晨,方知寒夜彻骨。

幽待清醉,顿悟友情可贵。

二零一一年四月七日 西二旗

 2014-03-10
晨记

晨记

人言酒,风入松。

酒意酣,趣意浓。

夜未央,绕指香。

岁流长,丫慢点喝。

今起时,雾满都。

遮了树,迷了路。

二零一四年三月十日 虎门大桥

 2013-07-17
盛夏小记

盛夏小记

细水蓝流,流到何年方始休?

渔船鼓浪,浪倚孤影声悠悠。

来轸方遒,此经落拓路依旧。

莫叹去留,情到深处无怨尤。

二零一三年四月十七日 香港

 2011-11-11
晚秋小记

晚秋小记

银杏飘零,抹得几缕夕阳?

浮光掠影,岂知荡气回肠。

凌霜泻地,不尽世间炎凉。

席间对饮,但话一曲家常。

二零一一年十一月十一日 西二旗

 2011-04-07
晚春小记

晚春小记

日趋千里,奈何人生如寄?

追叙往昔,感慨理想依稀。

漫步凌晨,方知寒夜彻骨。

幽待清醉,顿悟友情可贵。

二零一一年四月七日 西二旗

 2018-08-01
基金数据爬虫

购买基金可以参考一个法则: 最近一年、两年、三年、五年及成立以来收益率排名同类基金的前1/4 最近三个月、六个月收益率排名同类基金的前1/3笔者实现了一个应用,依据上述法则筛选基金,降低广大基民踩雷的风险。本应用包含数据爬虫、数据存储和数据展示三个模块。本应用并没有采用传统的SQL作为数据库存储,而是直接利用...

 2015-12-05
静态代码检查工具--Klocwork

1. 前言 全球前5位的智能手机公司就有4个在使用Klocwork 全球前7位的芯片制造商就有5个在使用Klocwork 全球前10位的通讯设备制造商就有8个在使用Klocwork 美国前7位的航空与国防企业就有5个在使用Klocwork 全球前10位的医疗设备企业就有7个在使用Klocwork初识Kl...

 2014-12-25
UML关联、聚合、组合关系的区别

概要本文介绍面向对象编程中,实体对象之间的相互依赖关系,包括:关联、聚合、组成和继承关系。虽然已经有很多文章,介绍这几种关系之间的区别,但仍有一些开发人员对这几种关系的理解存在困惑。有时候,这几种依赖关系之间的界定,从代码结构上并不好区分,更多的是需要从语义的角度来理解。笔者试图从面向对象的使用场景,来说明这些关...

 2017-12-25
Android Context的设计思想和源码分析

做了好些年Android,终于可以聊一聊既熟悉又陌生的Context了,每个刚入门的Android开发人员都会接触到它;然而要读懂Context的设计哲学,却又要经过好多轮的认知升级。很多时候,大家是感知不到Context的存在的,笔者最开始“被迫”使用Context,是在自定义控件的时候,布局中有一个按钮,点击一次就发送一次广播,其代码片段如下所示:

 2017-01-04
Android包管理机制

1 概要每一个社会群落都有管理机制,其中有三个要素:被管理者、管理者以及管理机制的运转。在Android的世界中,有一处群落叫“包管理”,要研究Android的包管理机制,同样可以从以下几个角度来思考: 被管理的对象是什么? 管理者的职能是什么? 管理机制是如何运转的?所谓包,其实就是一种文件格式,譬如AP...

 2016-10-23
Android四大组件之Activity--启动过程(下)

Activity的启动过程(上)一文中,我们介绍了Activity启动过程的上半部分, 按照Activity的启动时序,涉及内容到多达11个函数,最终落脚点在创建一个应用进程。Activity启动过程的上半部分都还是在系统进程中完成,是系统进程内部数据结构和状态的调整。本文分析Activity启动过程的下半部分,涉及到系统进程和应用进程的通信,建议读者先读完应用进程与系统进程的通信,了解两个进程的通信方式。

 2016-07-29
Android四大组件之Activity--启动过程(上)

Activity的启动过程涉及到的逻辑非常庞大,很难做到单点突破,建议读者在读本文之前,把Activity的四种启动模式ActivityManagerService的启动过程Activity的管理方式都再读一遍,储存一些背景知识。也是由于内容太多,笔者把启动过程分为上、下两部分介绍,另外一部分在Activity的启动过程(下)一文中。

 2016-07-15
ActivityManagerService的启动过程

1. 概览ActivitityManagerService(下文简称AMS)作为系统中最重要的服务,在开机时就会被启动,而且一直存在。那么,Android是如何启动AMS,以及启动AMS时做了哪些初始化工作呢?从进入Android系统进程(SystemServer)到用户所见的桌面(HomeActivity),整...

 2016-06-12
一种Android多分支的自动合并方案

1. 背景对于Android系统级开发人员而言,维护多个分支的代码是常态,尤其是当新的Android版本发布时,设备厂商更是苦不堪言,即疲于最新Android版本的适配,又苦于大量旧机型的维护。为了尽可能的减少维护的工作量,设备厂商有很多手段来避免新增分支,譬如: 编译时过滤。通过编译开关来兼容代码差异...

 2016-02-01
Android四大组件之Activity--管理方式

1. 概览Activity的管理有静态和动态两层涵义: 静态是指Activity的代码组织结构,即Application中声明的Activity的集合,这些Activity被组织在一个APK中,有特定的包名。在编写应用程序时,Activity对应到用户界面,它定义了用户界面的布局、交互行为、启动方式等,...

 2016-01-29
Android四大组件之Activity--应用进程与系统进程的通信

Android中有一个系统进程(system_process,在Lollipop之前,叫system_server),运行着系统的重要服务(AMS, PMS, WMS), 针对Activity而言,系统进程需要不断地调度Activity执行,管理Activity的状态; 每一个APK都需要运行在一个应用进程中,有自己独立的内存空间, 针对Activity而言,应用进程需要执行Activity生命周期函数(onCreate, onStart, …onDestroy)的具体逻辑。

 2015-11-04
StrictMode机制以及使用场景

1. 概览StrictMode,严苛模式,是Android提供的一种运行时检测机制,用于检测代码运行时的一些不规范的操作,最常见的场景是用于发现主线程的IO操作。StrictMode包含两个维度的概念: Policy(策略): 是指StrictMode对一些违规操作的发现策略,分为两类:一类是针对一个具...

 2015-10-12
Watchdog机制以及问题分析

1. 概览Watchdog的中文的“看门狗”,有保护的意思。最早引入Watchdog是在单片机系统中,由于单片机的工作环境容易受到外界磁场的干扰,导致程序“跑飞”,造成整个系统无法正常工作,因此,引入了一个“看门狗”,对单片机的运行状态进行实时监测,针对运行故障做一些保护处理,譬如让系统重启。这种Watchdog...

 2015-10-12
ANR机制以及问题分析

1. 概览ANR(Application Not Responding),应用程序无响应,简单一个定义,却涵盖了很多Android系统的设计思想。首先,ANR属于应用程序的范畴,这不同于SNR(System Not Respoding),SNR反映的问题是系统进程(system_server)失去了响应能力,而A...

 2015-08-30
AOSP代码管理

1. 概要与大部分设备厂商一样,Google也面临着AOSP(Android Open Source Project)多分支的管理问题,AOSP需要使用多个分支来维护不同的Android版本,设备厂商除了要接受Android版本的不同分支,还要使用更多的分支来处理不同设备之间的差异。维护多个分支始终是一项繁重的任...

 2015-08-08
编译系统(1)-概览

1. 概要编译,就是将高级语言转换成机器语言。譬如,通过gcc将C语言编译成可以运行的二进制;通过javac将Java语言编译成可以在Java虚拟机上可以运行的字节码。对于简单的项目,源文件数量较少,通常只需要几条命令,组织一下源文件,调用一下编译器,生成一个可以运行的文件,就算是一个“编译系统”; 但对于大型的...

 2015-07-19
dumpsys介绍

1. 概要dumpsys是Android提供的系统工具,可以用来查看所有系统服务的信息。在命令行输入如下命令,就可以罗列出当前所有的系统服务名:$ adb shell dumpsys -lCurrently running services: ... SurfaceFlinger ... activity...

 2015-06-25
Repo介绍

阅读本文之前,需要对git有一定的了解。1. 概要repo是Android为了方便管理多个git库而开发的Python脚本。repo的出现,并非为了取代git,而是为了让Android开发者更为有效的利用git。Android源码包含数百个git库,仅仅是下载这么多git库就是一项繁重的任务,所以在下载源码时,A...

 2015-05-21
adb介绍

1. 概要Android Debug Bridge(adb)是一个Android的命令行工具,可以用来连接模拟器或实际的移动设备。做过Android开发的朋友一定对adb logcat, adb shell命令不陌生,Dalvik Debug Monitor Server(DDMS)后台也是运行的adb来实现监控...