2012年2月8日

Android AIDL使用详解

摘要: 1.什么是aidl:aidl是 Android Interface definition language的缩写,一看就明白,它是一种android内部进程通信接口的描述语言,通过它我们可以定义进程间的通信接口icp:interprocess communication :内部进程通信2.既然aidl可以定义并实现进程通信,那么我们怎么使用它呢?文档/android-sdk/docs/guide/developing/tools/aidl.html中对步骤作了详细描述:--1.Create your .aidl file - This file defines an interface (Yo 阅读全文

posted @ 2012-02-08 17:49 小小博客小小员 阅读(824) 评论(0) 推荐(0) 编辑

Android AIDL——实现机制浅析

摘要: 1.基于前面写的aidl使用,这段时间准备研究ActivityManager框架,对aidl进行了更深入的研究,因为android框架大量使用了进程通信机制,所以,在研究android framework前认真研究一下AIDL的实现机制十分有必要的 2.前面讲了aidl是 Android Interface definition language的缩写,它是一种进程通信接口的描述,通过sdk解释器对器进行编译,会把它编译成java代码在gen目录下,类路径与aidl文件的类路径相同。 3.aidl接口package com.cao.android.demos.binder.aidl; impo 阅读全文

posted @ 2012-02-08 16:39 小小博客小小员 阅读(2038) 评论(0) 推荐(0) 编辑

android 布局长度单位深入研究

摘要: 要想使自己的布局在不同设备达到精准空置,理清理顺android布局长度单位之间关系很有必要,否则你也许会经常挠头为什么显示出来的布局不是自己定义的效果呢,有些东西,虽然基础,但是弄个透彻也需要花些功夫,废话不多说,下面开始。1.先了解一下android有支持哪些长度单位:px: pixels(像素). 不同设备显示效果相同,比如我们800*480的屏幕宽度就是 800pxdip: device independent pixels(设备独立像素). 不同设备有不同的显示效果,这个和设备硬件有关,通常屏幕大时,density就大,屏幕小时,density就小 屏幕实际分辨率为240px*400p 阅读全文

posted @ 2012-02-08 16:38 小小博客小小员 阅读(540) 评论(0) 推荐(0) 编辑

android Launcher——拖放功能深入研究

摘要: Luancher有一个相对比较复杂的功能就是拖放功能,要深入了解launcher,深入理解拖放功能是有必要的,这篇blog,我将对launcher的拖放功能做深入的了解1.首先直观感受什么时候开始拖放?我们长按桌面一个应用图标或者控件的时候拖放就开始了,包括在all app view中长按应用图标,下面就是我截取的拖放开始的代码调用堆栈at com.android.launcher2.DragController.startDrag(DragController.java:170)at com.android.launcher2.Workspace.startDrag(Workspace.ja 阅读全文

posted @ 2012-02-08 16:37 小小博客小小员 阅读(2531) 评论(4) 推荐(1) 编辑

android Launcher——启动过程详解

摘要: 一LauncherApplication->onCreate --1.//设置最小堆内存4M --2.//建立应用图标缓存器 --3.//建立LauncherModel --4.//注册Intent.ACTION_PACKAGE_ADDED,Intent.ACTION_PACKAGE_REMOVED,Intent.ACTION_PACKAGE_CHANGED事件监听器 LauncherModel作为广播接收器对上面3中事件进行监听 --5.//添加对桌面favorites content provider 数据变化监听器二Launcher->onCreate --1.获取Launc 阅读全文

posted @ 2012-02-08 16:35 小小博客小小员 阅读(2214) 评论(0) 推荐(0) 编辑

android Launcher——数据加载与变更

摘要: 在前面我的blog中,我已经说过了,Launcher所有的桌面项数据是存储在launcher.db/favorites表中在 Launcher启动时loadeworkspace函数中会从数据库中查询所有的数据并显示出来,这个桌面项数据加载过程在我的blog Launcher——启动过程详解中有比较详细的描述,这篇blog,我着重讲述Launcher桌面项的添加,变更和删除,下面就进入主题1.Launcher桌面项的添加:从用户操作的角度来看,我们有两种方式来添加桌面项--1.从all app view中拖到桌面,从下面的调用堆栈知道最后通过LauncherProvider.insert把拖过来 阅读全文

posted @ 2012-02-08 16:35 小小博客小小员 阅读(1345) 评论(0) 推荐(0) 编辑

android Launcher——ui框架

摘要: 着手开发laucher 我个人觉得首先要从ui框架入手,了解清楚了ui框架对laucher就有了一个大致的了解,知道关键的几个类在哪里,对后面进一步深入地研究作出铺垫。废话不多说了,直接进入主题:1.先看图这是我正在研究的一个800*480的launcher的ui框架图,对应的桌面显示效果如下:下面一行应用是我修改桌面后的结果,在前面我的ui框架图中没有。闲话不多说,下面就一一做出讲解1.DragLayer--DragLayer继承FrameLayout,并在此基础上组合了DragController实现拖放功能,DragLayer主要监听下面两个用户事件onInterceptTouchEve 阅读全文

posted @ 2012-02-08 16:32 小小博客小小员 阅读(1526) 评论(0) 推荐(0) 编辑

Android FrameWork——Touch事件派发过程详解

摘要: 对于android的窗口window管理,一直感觉很混乱,总想找个时间好好研究,却不知如何入手,现在写的Touch事件派发过程详解,其实跟 android的窗口window管理服务WindowManagerService存在紧密联系,所以从这里入手切入到 WindowManagerService的研究,本blog主要讲述一个touch事件如何从用户消息的采集,到 WindowManagerService对Touch事件的派发,再到一个Activity窗口touch事件的派发,并着重讲了Activity窗口 touch事件的派发,因为这个的理解对我们写应用很好地处理touch事件很重要一.用户事 阅读全文

posted @ 2012-02-08 16:29 小小博客小小员 阅读(3161) 评论(0) 推荐(0) 编辑

Android FrameWork——Binder机制详解(1)

摘要: 1.前面我曾经发表过一篇blog介绍了aidl实现机制(aidl实现机制浅析),不过那只是停留在java表层,并遗留了一个问题,那就是BinderProxy.transact 该方法本地化实现,同时我指出了它的具体代码位置:\frameworks\base\core\jni\android_util_Binder.cpp->static jboolean android_os_BinderProxy_transact(JNIEnv* env, jobject obj,jint code, jobject dataObj,jobject replyObj, jint flags)要进一步深 阅读全文

posted @ 2012-02-08 16:27 小小博客小小员 阅读(1192) 评论(0) 推荐(0) 编辑

Android FrameWork——Binder机制详解(2)

摘要: 6.前面5个段落我主要说明了BinderProxy是如何把数据发送出去的,Ok,那么接下来,我们肯定想要知道服务端是怎么接收数据并传递给相应的BBinder进行处理的,有没有注意到前面waitForResponse我标注为蓝色的代码,这给我们一个启示,也许接收返回数据(进程作为客户端)和接收命令(进程作为服务端)处理的是同一个函数,但这是我的一个猜测,而实际上我参阅其它blog和代码后并非这么回事,waitForResponse只在客户端发送完数据等待接收数据才被调用的,那么服务端是怎么接收数据的呢?做过socket编程的同仁们可能知道,服务端为实现接收数据和链接,一般会启动一个监听线程去监听 阅读全文

posted @ 2012-02-08 16:27 小小博客小小员 阅读(910) 评论(0) 推荐(0) 编辑

Android FrameWork——StatusBar

摘要: Android系统顶上的状态栏是属于FrameWork的东东,由于项目上需要对状态栏进行一些修改调整,我对其作了一个初步研究,写出来大家共享一下,其实这些早已写了,只是想等研究StatusBar中ExtendsView后再整理一个blog,不过现在已经没有时间了,目前深入研究Android Binder机制,废话不多少,开始进入statusbar的探索 1.先从StatusBar的布局文件入手,文件位置位置:frameworks/base/core/res/res/layout/status_bar.xml 2.我对status_bar.xml布局文件进行分析,画出结构图,以便对Status. 阅读全文

posted @ 2012-02-08 16:25 小小博客小小员 阅读(1484) 评论(0) 推荐(0) 编辑

Android FrameWork——PackageManager框架

摘要: 1.接着前面讲的ActivityManager框架,继续说一下系统另一个重要的框架,PackagerManager同样先看一下静态类结构图:大 部分情况我们是在Activity中使用getPackageManager方法获取一个ApplicationPackageManager的对 象,ApplicationPackageManager实际上是包装了一个IPackageManager.Stub.Proxy的对象由IPackageManager.Stub.Proxy代理执行PackageManager相关操作,IPackageManager.Stub.Proxy实际代理的是PackageMana 阅读全文

posted @ 2012-02-08 16:24 小小博客小小员 阅读(2695) 评论(0) 推荐(2) 编辑

Android FrameWork——Activity启动过程详解

摘要: 前面发了blog分析了ActivityManager框架的大体结构,主要就是一个进程通信机制,今天我通过深入Activity的启动过程再次深入到ActivityManager框架,对其进行一个更深入的了解 以桌面启动一个应用Activity为例,onClick事件后,会调用startActivityForResult(Intent, int) public void startActivityForResult(Intent intent, int requestCode) { if (mParent == null) { //Activity启动执行交由Instrumentation对象去. 阅读全文

posted @ 2012-02-08 16:23 小小博客小小员 阅读(1866) 评论(0) 推荐(1) 编辑

Android FrameWork——ActivityManager框架

摘要: 1.ActivityManager是android框架的一个重要部分,它负责一新ActivityThread进程创建,Activity生命周期的维护,本blog就是着手对ActivityManager框架作一个整体的了解 2.先看一个静态类结构图: 该图摘自 曹文斌blog<Activity Manager框架解析> 上图很清楚地描述了ActivityManager框架的几个主要类之间的关系,我们做应用开发接触很多的其实就是ActivityManager类,该类也在SDK中公布,应用可以直接访问,它提供了我们管理Activity的一些基本的方法如下: public void tes 阅读全文

posted @ 2012-02-08 16:19 小小博客小小员 阅读(2454) 评论(0) 推荐(0) 编辑

导航