<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[dkphenix的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/dkphenix</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; dkphenix]]></copyright><item><title><![CDATA[JAVA/Android Concurrency学习笔记]]></title><link>https://blog.youkuaiyun.com/dkphenix/article/details/53408407</link><guid>https://blog.youkuaiyun.com/dkphenix/article/details/53408407</guid><author>dkphenix</author><pubDate>Wed, 30 Nov 2016 18:20:02 +0800</pubDate><description><![CDATA[Thread SafetyWriting thread-safe code is, at its core, about managing access to state, and in particular to shared, mutable state.An object’s state encompasses any data that can affect its externally v]]></description><category></category></item><item><title><![CDATA[Android IPC]]></title><link>https://blog.youkuaiyun.com/dkphenix/article/details/53116451</link><guid>https://blog.youkuaiyun.com/dkphenix/article/details/53116451</guid><author>dkphenix</author><pubDate>Thu, 10 Nov 2016 15:47:02 +0800</pubDate><description><![CDATA[Android OS的核心设计思想是component，而支持component的基石则是Inter-component-communication/Inter-process-communication，而不同抽象层次的ICC/IPC都是由Binder来实现的。 
从概念上来说，Binder采用C/S通信Model。传送的数据存放于Transaction中，为了能把不同结构的数据放入Transac]]></description><category></category></item><item><title><![CDATA[Android的Graphic System]]></title><link>https://blog.youkuaiyun.com/dkphenix/article/details/53019785</link><guid>https://blog.youkuaiyun.com/dkphenix/article/details/53019785</guid><author>dkphenix</author><pubDate>Thu, 03 Nov 2016 11:21:03 +0800</pubDate><description><![CDATA[Android gfx system的核心是一个生产者消费者模型：生产者消费者分别存在于不同的进程，消费者对应SurfaceFlinger，生产者对应application或者其他service。在生产者消费者之间流动的是用来显示的数据。1. GFX ARCH1.1 总体结构1.2 数据流模型 
The diagram above depicts the flow of SurfaceFlinger]]></description><category></category></item><item><title><![CDATA[跟着Innost理解下与Activity相关的UI控件系统]]></title><link>https://blog.youkuaiyun.com/dkphenix/article/details/52980306</link><guid>https://blog.youkuaiyun.com/dkphenix/article/details/52980306</guid><author>dkphenix</author><pubDate>Mon, 31 Oct 2016 10:30:11 +0800</pubDate><description><![CDATA[Android的控件系统封装了： 
·  测量各个UI元素（一段文字、一个图片）的显示尺寸与位置。 
·  对各个UI元素进行布局计算与绘制。 
·  当显示内容需要发生变化时进行重绘。出于效率考虑，必须保证重绘区域尽可能地小。 
·  分析InputEventReceiver所接收的事件的类型，并确定应该由哪个UI元素响应这个事件。 
·  处理来自WMS的很多与窗口状态相关的回调。控件系统可以分]]></description><category></category></item><item><title><![CDATA[跟着Innost理解下Android输入系统]]></title><link>https://blog.youkuaiyun.com/dkphenix/article/details/52945087</link><guid>https://blog.youkuaiyun.com/dkphenix/article/details/52945087</guid><author>dkphenix</author><pubDate>Thu, 27 Oct 2016 13:47:51 +0800</pubDate><description><![CDATA[Android输入系统的工作原理，包括输入设备的管理、输入事件的加工方式以及派发流程。本章的探讨对象有两个：输入设备、输入事件。 
触摸屏与键盘是Android最普遍也是最标准的输入设备。其实Android所支持的输入设备的种类不止这两个，鼠标、游戏手柄均在内建的支持之列。当输入设备可用时，Linux内核会在/dev/input/下创建对应的名为event0~n或其他名称的设备节点。而当输入设备不可]]></description><category></category></item><item><title><![CDATA[跟着Innost理解下WindowsManagerService]]></title><link>https://blog.youkuaiyun.com/dkphenix/article/details/52943143</link><guid>https://blog.youkuaiyun.com/dkphenix/article/details/52943143</guid><author>dkphenix</author><pubDate>Thu, 27 Oct 2016 10:18:04 +0800</pubDate><description><![CDATA[WMS为所有窗口分配Surface，掌管Surface的显示顺序（Z-order）以及位置尺寸，控制窗口动画，并且还是输入系统的一重要的中转站。窗口（Window）：Android系统中的窗口是屏幕上的一块用于绘制各种UI元素并可以响应应用户输入的一个矩形区域。从原理上来讲，窗口的概念是独自占有一个Surface实例的显示区域。例如Dialog、Activity的界面、壁纸、状态栏以及Toast等都]]></description><category></category></item><item><title><![CDATA[跟着Innost理解下数据更新、数据同步]]></title><link>https://blog.youkuaiyun.com/dkphenix/article/details/52849388</link><guid>https://blog.youkuaiyun.com/dkphenix/article/details/52849388</guid><author>dkphenix</author><pubDate>Tue, 18 Oct 2016 15:29:40 +0800</pubDate><description><![CDATA[本章将先分析ContentService中数据通知机制的实现，然后分析AccountManagerService，最后再介绍ContentService中的数据同步服务。ContentService包含以下两个主要功能： 
·  它是Android平台中数据更新通知的执行者。数据更新通知与Cursor，query函数实现时提到的ContentObserver有关。 
·  它是Android平台中数]]></description><category></category></item><item><title><![CDATA[跟着Innost理解下ContentProvider]]></title><link>https://blog.youkuaiyun.com/dkphenix/article/details/52839883</link><guid>https://blog.youkuaiyun.com/dkphenix/article/details/52839883</guid><author>dkphenix</author><pubDate>Mon, 17 Oct 2016 16:48:47 +0800</pubDate><description><![CDATA[重点分析ContentProvider、SQLite、Cursor query、close函数的实现及ContentResolver openAssetFileDescriptor函数。四条分析路线。 
·  第一条：以客户端进程通过query来查询相关信息为入口点，分析系统如何创建和启动ContentProvider。此分析路线着重关注客户端进程、ActivityManagerService及Me]]></description><category></category></item><item><title><![CDATA[跟着Innost理解下Service 的启动以及与AMS的交互]]></title><link>https://blog.youkuaiyun.com/dkphenix/article/details/52838555</link><guid>https://blog.youkuaiyun.com/dkphenix/article/details/52838555</guid><author>dkphenix</author><pubDate>Mon, 17 Oct 2016 14:33:25 +0800</pubDate><description><![CDATA[作为四大组件之一Service，其响应Client的请求方式有两种： 
·  Client通过调用startService向Service端发送一个Intent，该Intent携带请求信息。而Service的onStartCommand会接受该Intent，并处理之。该方式是Android平台特有的，借助Intent来传递请求。 
·  Client调用bindService函数和一个指定的Serv]]></description><category></category></item><item><title><![CDATA[跟着Innost理解下Broadcast和BroadcastReceiver]]></title><link>https://blog.youkuaiyun.com/dkphenix/article/details/52837218</link><guid>https://blog.youkuaiyun.com/dkphenix/article/details/52837218</guid><author>dkphenix</author><pubDate>Mon, 17 Oct 2016 11:19:43 +0800</pubDate><description><![CDATA[目前，系统提供两种方式来声明一个广播接收者。 
·  在AndroidManifest.xml中声明标签。在应用程序运行时，系统会利用Java反射机制构造一个广播接收者实例。本书将这种广播接收者称为静态注册者或静态接收者。 
·  在应用程序运行过程中，可调用Context提供的registerReceiver函数注册一个广播接收者实例。本书将这种广播接收者称为动态注册者或动态接收者。与之相对应，当]]></description><category></category></item><item><title><![CDATA[跟着Innost理解下Activity 的启动以及与AMS的交互]]></title><link>https://blog.youkuaiyun.com/dkphenix/article/details/52837070</link><guid>https://blog.youkuaiyun.com/dkphenix/article/details/52837070</guid><author>dkphenix</author><pubDate>Mon, 17 Oct 2016 11:06:32 +0800</pubDate><description><![CDATA[此次旅程： 
·   行程的起点是am。am是Android中很重要的程序，读者务必要掌握它的用法。我们利用am start命令，发起本次目标Activity的启动请求。 
·  接下来进入ActivityManagerService和ActivityStack这两个核心类。对于启动Activity来说，这段行程又可分细分为两个阶段：第一阶段的主要工作就是根据启动模式和启动标志找到或创建Activi]]></description><category></category></item><item><title><![CDATA[跟着Innost理解下ActivityManagerService]]></title><link>https://blog.youkuaiyun.com/dkphenix/article/details/52796861</link><guid>https://blog.youkuaiyun.com/dkphenix/article/details/52796861</guid><author>dkphenix</author><pubDate>Wed, 12 Oct 2016 14:18:44 +0800</pubDate><description><![CDATA[SystemServer中AMS的调用轨迹 
以am命令启动一个Activity为例，分析应用进程的创建、Activity的启动，以及它们和AMS之间的交互等知识 
分别以Broadcast和Service为例，分析AMS中Broadcast和Service的相关处理流程 
以一个Crash的应用进程为出发点，分析AMS如何打理该应用进程的身后事 
AMS中应用进程的调度、内存管理 
Content]]></description><category></category></item><item><title><![CDATA[Android ART的运行]]></title><link>https://blog.youkuaiyun.com/dkphenix/article/details/52681087</link><guid>https://blog.youkuaiyun.com/dkphenix/article/details/52681087</guid><author>dkphenix</author><pubDate>Tue, 27 Sep 2016 15:24:27 +0800</pubDate><description><![CDATA[Android oat ELF 
oatdata：存储dex文件 
oatexec：存储翻译成本地机器码的指令 
details 
加载oat 文件的过程Utils classes for oatloading 
查找类/方法/native code过程概述 
Boot images 
boot.art文件包含一些特殊的函数，这些函数会在ART虚拟机初始化image空间的时候，将其地址赋给相应的变量]]></description><category></category></item><item><title><![CDATA[Android JVM的运行过程]]></title><link>https://blog.youkuaiyun.com/dkphenix/article/details/52596371</link><guid>https://blog.youkuaiyun.com/dkphenix/article/details/52596371</guid><author>dkphenix</author><pubDate>Tue, 20 Sep 2016 15:19:26 +0800</pubDate><description><![CDATA[JVM有三重意思：java virtual machine specification，java virtual machine implementation, java virtual machine runtime instance. 作为Android系统的使用者，我们主要关心runtime instance，不过为了对JVM全貌有个了解，还是需要简要回顾一下JVM specification]]></description><category></category></item><item><title><![CDATA[Android APK的安装过程]]></title><link>https://blog.youkuaiyun.com/dkphenix/article/details/52587231</link><guid>https://blog.youkuaiyun.com/dkphenix/article/details/52587231</guid><author>dkphenix</author><pubDate>Mon, 19 Sep 2016 16:50:10 +0800</pubDate><description><![CDATA[APK的存放目的地预装APK放在/system/app 或者/system/priv-app/; 用户后装APK放在/data/app/; 
1. 放在/system/与放在/data/的区别在于： /system/对于非root是read only， 因此，放在/system/app或者/system/priv-app的APK通常没法删除。 
2. 放在/system/app/与放在/system]]></description><category></category></item><item><title><![CDATA[Android APK的生成流程]]></title><link>https://blog.youkuaiyun.com/dkphenix/article/details/52575096</link><guid>https://blog.youkuaiyun.com/dkphenix/article/details/52575096</guid><author>dkphenix</author><pubDate>Sun, 18 Sep 2016 15:47:52 +0800</pubDate><description><![CDATA[第一次接触写Android APP， 不是太清楚Eclipse和AS自动化的的工作后面发生了什么，所以拜读老罗/炸斯特/Android Docs文章后，基于Android M上做个实践总结。 
1. 重点是APK的生成流程。 
2. Android APP的代码结构是这个流程起始的地方，它决定了APK生成的流程怎么走。 
3. 整个流程的结果是一个APK以及对应的odex。Android APP的代]]></description><category></category></item></channel></rss>