<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[老唐 的专栏]]></title><description><![CDATA[愿有多大、路有多长……]]></description><link>https://blog.youkuaiyun.com/sfdev</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; sfdev]]></copyright><item><title><![CDATA[推荐一个app，收纳杭州最全登山地图！附亲测过的亲子徒步路线推荐]]></title><link>https://blog.youkuaiyun.com/sfdev/article/details/82912143</link><guid>https://blog.youkuaiyun.com/sfdev/article/details/82912143</guid><author>sfdev</author><pubDate>Sun, 30 Sep 2018 17:33:23 +0800</pubDate><description><![CDATA[第一次有公众号专门推荐我做的这个“杭州登山地图”app，所以特地转载下，感谢@杭州iKids



到了杭州最宜人的季节，秋高气爽，满城桂花香。

这个季节当然是不能辜负的，温度适宜，晓风扑面，是徒步爬山最适合的时间。

也许有人会说，小孩子爬不了山，其实加一点小“策略”就可以，比如从简单好征服的山开始，感染孩子爱上这样又看风景又锻炼的生活方式；比如让孩子自己打包一个零食盒随身带，走一段吃一段就坚...]]></description><category></category></item><item><title><![CDATA[为你的梦想和目标去真正付出【时任树熊WIFI CTO时的一次内部分享】]]></title><link>https://blog.youkuaiyun.com/sfdev/article/details/78946414</link><guid>https://blog.youkuaiyun.com/sfdev/article/details/78946414</guid><author>sfdev</author><pubDate>Mon, 01 Jan 2018 17:54:54 +0800</pubDate><description><![CDATA[这篇文章原本是发布在树熊网络公司公众号里面的，是在2015.6进行的一次公司内部分享，但由于现在公司公众号转移，原链接已经无法访问了，所以再在自己的博客里面重新贴一下，备忘！
聊聊梦想之前聊聊我的经历
今晚我们利用每周技术分享会的时间来聊聊梦想、聊聊人生；为了能让大家更好的体会我后面讲的一些收获，我要先聊聊我自己，我接下来要讲的是我人生第一次在公开场合面对这么多人说这些话，在此之前我思考了很久]]></description><category></category></item><item><title><![CDATA[《Android内核剖析》读书笔记 第13章 View工作原理【动画概述】]]></title><link>https://blog.youkuaiyun.com/sfdev/article/details/9329295</link><guid>https://blog.youkuaiyun.com/sfdev/article/details/9329295</guid><author>sfdev</author><pubDate>Mon, 15 Jul 2013 10:38:51 +0800</pubDate><description><![CDATA[从动画效果的影响范围角度看，View系统中的动画可以分为三类：

窗口动画：窗口对应的动画，其作用对象是Surface；窗口可以是Activity对应的窗口，也可以是对话框这样的子窗口，当然还可以是直接通过WindowManager.addView()添加的任意窗口；布局动画：指ViewGroup容器对象包含的动画，该动画在ViewGroup对象中定义，但实际上影响的却是该容器内的子视图，其本]]></description><category></category></item><item><title><![CDATA[《Android内核剖析》读书笔记 第13章 View工作原理【View重绘过程】]]></title><link>https://blog.youkuaiyun.com/sfdev/article/details/9279291</link><guid>https://blog.youkuaiyun.com/sfdev/article/details/9279291</guid><author>sfdev</author><pubDate>Tue, 09 Jul 2013 10:58:34 +0800</pubDate><description><![CDATA[计算视图大小的过程（Measure）
视图大小，准确的来说应该是指视图的布局大小；我们在layout.xml中为每个UI控件设置的layout_width/layout_height两个属性被用来设置父视图给当前视图分配的“窗口”大小，为了开发的方便和对不同屏幕分辨率的兼容适配对这两个参数的赋值一般都使用相对值（也可以使用具体值，比如100dp），比如WRAP_CONTENT/MATCH_PAR]]></description><category></category></item><item><title><![CDATA[《Android内核剖析》读书笔记 第13章 View工作原理【View树遍历】]]></title><link>https://blog.youkuaiyun.com/sfdev/article/details/9279161</link><guid>https://blog.youkuaiyun.com/sfdev/article/details/9279161</guid><author>sfdev</author><pubDate>Tue, 09 Jul 2013 10:44:47 +0800</pubDate><description><![CDATA[导致View树重新遍历的总体诱因
遍历View树意味着整个View需要重新对其包含的子视图分配大小并重绘；一般情况下导致重新遍历的原因有三个：其一，视图本身内部状态发生变化，比如显示属性由GONE到VISIBLE；其二，ViewGroup中添加或删除了视图导致需要重新为子视图分配位置；其三，视图本身的大小发生变化，比如TextView中的文本内容变多变少了；
在代码层面这三种情况最后都会直接或间接调用到View中的三个函数：requestLayout/requestFocus/invalidate；由于是V]]></description><category></category></item><item><title><![CDATA[《Android内核剖析》读书笔记 第13章 View工作原理【触摸消息派发】]]></title><link>https://blog.youkuaiyun.com/sfdev/article/details/9172801</link><guid>https://blog.youkuaiyun.com/sfdev/article/details/9172801</guid><author>sfdev</author><pubDate>Tue, 25 Jun 2013 18:43:37 +0800</pubDate><description><![CDATA[相比按键消息，触摸消息也是由ViewRootImpl.WindowInputEventReceiver实例负责接收，然后判断消息类型之后执行不同的方法，对于触摸消息就是执行
deliverPointerEvent(.)方法；不同点主要以下几点：

触摸消息由消息获取模块InputManagerService直接派发给应用程序，而无需经过Wms内部的预处理，最新的版本中仅仅会对当屏幕关闭时执行]]></description><category></category></item><item><title><![CDATA[《Android内核剖析》读书笔记 第13章 View工作原理【消息类型与按键消息派发】]]></title><link>https://blog.youkuaiyun.com/sfdev/article/details/9172787</link><guid>https://blog.youkuaiyun.com/sfdev/article/details/9172787</guid><author>sfdev</author><pubDate>Tue, 25 Jun 2013 18:38:00 +0800</pubDate><description><![CDATA[View是android系统的三大核心基础组件之一（另外两个分别是Ams和Wms），我们经常提到的Activity/Service/Content Provider/Broadcast Receiver这是应用开发层面的四大组件；
View提供了对页面展示各种元素的一种抽象，android系统中用到的所有UI控件（比如按钮、文本框等）都是继承于View类，他主要完成两块核心功能，其一：针对各种按]]></description><category></category></item><item><title><![CDATA[《Android内核剖析》读书笔记 第12章 屏幕绘图基础]]></title><link>https://blog.youkuaiyun.com/sfdev/article/details/9140107</link><guid>https://blog.youkuaiyun.com/sfdev/article/details/9140107</guid><author>sfdev</author><pubDate>Thu, 20 Jun 2013 19:51:34 +0800</pubDate><description><![CDATA[Android中的GUI系统是客户端和服务端配合的窗口系统，即后台运行了一个绘制服务，每个应用程序都是该服务端的一个客户端，当客户端需要绘制时，首先请求服务端创建一个窗口，然后在窗口中进行具体的视图内容绘制；对于每个客户端而言，他们都感觉自己独占了屏幕，而对于服务端而言，它会给每一个客户端窗口分配不同的层值，并根据用户的交互情况动态改变窗口的层值，这就给用户造成了所谓的前台窗口和后台窗口的概念；]]></description><category></category></item><item><title><![CDATA[《Android内核剖析》读书笔记 第8章 创建窗口的过程]]></title><link>https://blog.youkuaiyun.com/sfdev/article/details/9130527</link><guid>https://blog.youkuaiyun.com/sfdev/article/details/9130527</guid><author>sfdev</author><pubDate>Wed, 19 Jun 2013 17:11:54 +0800</pubDate><description><![CDATA[本章主要关注的是在APP应用内部页面内容的加载过程，不涉及远程服务端Wms内部逻辑（这部分内容详见《第14章 Wms工作原理》）；
首先回顾下第6章所介绍过的一些有关窗口相关的内容：

对于Wms管理的窗口，具体指的是View，而不是Window类，Window类只是提供对窗口操作的一组抽象API而已；每个Activity都会对应一个窗口IWindow，当Wms收到用户消息之后会将消息派发到]]></description><category></category></item><item><title><![CDATA[《Android内核剖析》读书笔记 第7章 理解Context]]></title><link>https://blog.youkuaiyun.com/sfdev/article/details/9062867</link><guid>https://blog.youkuaiyun.com/sfdev/article/details/9062867</guid><author>sfdev</author><pubDate>Sun, 09 Jun 2013 11:41:28 +0800</pubDate><description><![CDATA[Context在我们实际开发中被广泛用到，比如 startActivity(…)/
getResources()/ getSharedPreferences(…)/
getSystemService(.)等等；书中把Context理解为一个应用场景，一个Activity实例就是一个应用场景，一个Service实例也是一种应用场景，只是他木有前台界面而已；与Context相关类的继承关系如下：]]></description><category></category></item><item><title><![CDATA[《Android内核剖析》读书笔记 第6章 应用框架Framework概述]]></title><link>https://blog.youkuaiyun.com/sfdev/article/details/9058545</link><guid>https://blog.youkuaiyun.com/sfdev/article/details/9058545</guid><author>sfdev</author><pubDate>Sat, 08 Jun 2013 18:40:33 +0800</pubDate><description><![CDATA[其实android就是基于Linux内核的一个GUI系统，只是他运行在手机上，各种资源都比较有限，而且他不仅处理按键事件，更主要的是处理触控事件；其整体架构可以参考下图（此图来源于网络）：


本章主要是介绍其中的应用框架层（Application Framework），前面的章节已经提到android是基于多进程设计的，先看看如下手稿图（mac下没找到顺手的UML画图工具），其类名基于4.]]></description><category></category></item><item><title><![CDATA[《Android内核剖析》读书笔记 第5章 进程间通信核心框架Binder]]></title><link>https://blog.youkuaiyun.com/sfdev/article/details/9033601</link><guid>https://blog.youkuaiyun.com/sfdev/article/details/9033601</guid><author>sfdev</author><pubDate>Wed, 05 Jun 2013 19:56:51 +0800</pubDate><description><![CDATA[Binder：英文的意思是别针、回形针。我们经常用别针把两张纸“别”在一起，在android系统中，Binder是用来完成进程间通信IPC的基础框架，即把不同进程“别”在一起，便于各个进程之间可以相互传递消息；如果做过Java服务端开发的话，你也可以理解成一种RPC调用，即在本地直接调用其他进程中的功能；理解该机制将有助于更好的掌握后面的android整体架构设计，因为核心模块之间的通信都是通过B]]></description><category></category></item><item><title><![CDATA[《Android内核剖析》读书笔记 第9章 Framework的启动过程]]></title><link>https://blog.youkuaiyun.com/sfdev/article/details/8935692</link><guid>https://blog.youkuaiyun.com/sfdev/article/details/8935692</guid><author>sfdev</author><pubDate>Thu, 16 May 2013 16:01:39 +0800</pubDate><description><![CDATA[对于Linux内核来说，其实Android系统就是一个普通的Linux应用程序而已，只是在init.rc中被设置为默认启动；

Framework运行环境综述
任何系统启动过程的本质都是要建立一套系统运行所需的环境；android系统的启动其实就是建立dalvik虚拟机运行所需的环境，总体如下：


android系统启动的第一个进程为zygote，意思为“受精卵”，因为接下来所有的D]]></description><category></category></item><item><title><![CDATA[《Android内核剖析》读书笔记 第18章 Android编译系统]]></title><link>https://blog.youkuaiyun.com/sfdev/article/details/8907066</link><guid>https://blog.youkuaiyun.com/sfdev/article/details/8907066</guid><author>sfdev</author><pubDate>Thu, 09 May 2013 18:53:49 +0800</pubDate><description><![CDATA[Android编译系统的核心仍然是第1章末尾介绍的Make，基于此建立了一个适合于Android自身的编译框架，该编译框架由各种.mk文件、shell脚本、python脚本共同组成；通过该框架各个系统模块可以单独编译或打包、也可以根据一定的规则进行整合打包输出；
框架的核心设计理论有如下几点：

建立在Make之上，定义好各类target；并适当引入python、shell脚本；基于COC（]]></description><category></category></item><item><title><![CDATA[《Android内核剖析》读书笔记 第3章 源码下载及开发环境配置]]></title><link>https://blog.youkuaiyun.com/sfdev/article/details/8900581</link><guid>https://blog.youkuaiyun.com/sfdev/article/details/8900581</guid><author>sfdev</author><pubDate>Wed, 08 May 2013 15:30:13 +0800</pubDate><description><![CDATA[有关源码下载与开发环境配置权威的请参见http://source.android.com/source/index.html
Android源码的编译只能在基于Linux的系统中执行，本人是在Mac系统下进行的尝试；
Mac系统中开发环境的相关准备


Mac系统默认的磁盘文件系统格式是不区分大小写（Case-insensitive）的，而android源码的编译必须基于区分大小写（Ca]]></description><category></category></item><item><title><![CDATA[《Android内核剖析》读书笔记 第2章 Java基础&异步消息处理模型]]></title><link>https://blog.youkuaiyun.com/sfdev/article/details/8900536</link><guid>https://blog.youkuaiyun.com/sfdev/article/details/8900536</guid><author>sfdev</author><pubDate>Wed, 08 May 2013 15:26:39 +0800</pubDate><description><![CDATA[dex文件：是对使用标准的Java编译器编译出的class文件内部的各种函数表、变量表等进行优化后重新打包得到的一种文件格式；
DexClassLoader：专门用来加载特殊的Class文件格式dex的类装载器；
JNI（Java本地接口）调用机制


需要使用到JNI的场景主要包括：调用底层驱动、需要高效大量数据处理、复用某些已有代码；
Java中调用C函数时，双方的名称需要有一个映]]></description><category></category></item><item><title><![CDATA[《Android内核剖析》读书笔记 第1章 Linux基础]]></title><link>https://blog.youkuaiyun.com/sfdev/article/details/8900503</link><guid>https://blog.youkuaiyun.com/sfdev/article/details/8900503</guid><author>sfdev</author><pubDate>Wed, 08 May 2013 15:21:00 +0800</pubDate><description><![CDATA[Android的底层任务管理及驱动都是基于Linux系统的；Linux系统使用的文件系统与Windows（存储类文件系统）差别很大，他采用的是根文件系统（rootfs），特点如下：

Linux系统中所有的资源都是文件，比如磁盘、U盘、内存、网络等硬件设备，当然还有磁盘上的数据文件；sys/proc/dev这三个目录他们对应的不是存储空间，而是设备文件，由内核及相应驱动程序维护；存储类文件系统]]></description><category></category></item><item><title><![CDATA[Web安全漏洞之：JDK1.5环境下扫描远程调试端口导致JVM崩溃【JDWP exit error JVMTI_ERROR_NONE(0)】]]></title><link>https://blog.youkuaiyun.com/sfdev/article/details/5828509</link><guid>https://blog.youkuaiyun.com/sfdev/article/details/5828509</guid><author>sfdev</author><pubDate>Sat, 21 Aug 2010 13:14:00 +0800</pubDate><description><![CDATA[问题描述：<br />对运行在JDK 1.5版本下的java应用服务器进行端口扫描，扫描的方式可以用相关扫描软件，最简单的是直接用ping/telnet命令，有闲情还可以自己写一段代码进行socket连接，扫描时会发现java进程crash，经测试百发百中；查看运行日志显示：<br />ERROR: transport error 202: handshake failed - received >GET / HTTP/1.0< - excepted >JDWP-Handshake< ["transport]]></description><category></category></item><item><title><![CDATA[优雅绝妙的Javascript跨域问题解决方案]]></title><link>https://blog.youkuaiyun.com/sfdev/article/details/5807045</link><guid>https://blog.youkuaiyun.com/sfdev/article/details/5807045</guid><author>sfdev</author><pubDate>Thu, 12 Aug 2010 15:18:00 +0800</pubDate><description><![CDATA[关于Javascript跨域问题的解决方案已在之前的一片文章中详细说明，详见：http://blog.youkuaiyun.com/sfdev/archive/2009/02/13/3887006.aspx；除了文中提到的3种解决方案之外，在今年的baidu salon分享会上黄方荣主讲的《WEB数据交互的艺术》中提到一个非常优雅绝妙的解决方案！话不多说，直接上解决方案原理图：该图要解决的问题说明如下：在AAA.com域名下的index.htm页面中内嵌了BBB.com域名下的一个页面index.htm，正常情况下if]]></description><category></category></item><item><title><![CDATA[09年收获之：什么是真正的客户第一]]></title><link>https://blog.youkuaiyun.com/sfdev/article/details/5802422</link><guid>https://blog.youkuaiyun.com/sfdev/article/details/5802422</guid><author>sfdev</author><pubDate>Mon, 10 May 2010 11:47:00 +0800</pubDate><description><![CDATA[从我们到itbu之后，我们一直强调工程师走向前台，要加强自己商业sense的培养，更多的从客户的角度去思考和看待问题！这也是我们对客户第一这条价值观体会的具体落地，那我们有些什么方法来让我们更好的从客户角度去思考问题呢？那就是多给自己打上几个问号，俗称3+1；  当我们决定要做某个功能时，请先问自己几个问题：  1、该需求从何而来？客户直接反馈、还是技术支持提交……    其实这主要考察的是我们是否有稳定的需求收集渠道和机制；我们要尽量听到直接来自客户的声音，避免自己YY，如果你远离了客户，那做出来的功能估]]></description><category></category></item></channel></rss>