Android
Korbin Luo
这个作者很懒,什么都没留下…
展开
-
Android入门之开篇
两年前有个转Android的机会,当时瞄了眼Android的代码,哦,应该是其他同事写的Android APK的代码,看到大段大段的内部类,当时任性,特别不喜欢内部类这种东西,倒不是因为它性能不好或什么的,而仅仅是个人喜好而已。 2014年11月份决定转Android,当然原因是各种各样,不过肯定不是因为Android对我产生了极大的吸引力。 总之要转,既然要转原创 2015-01-06 17:48:41 · 774 阅读 · 0 评论 -
Android入门之创建InputChannel
首先需要知道什么是InputChannel。 我们说,InputDispatcher和客户窗口ViewRoot之间,是通过Pipe传递消息的,而Pipe是Linux系统调用的一部分,Android为了能够调用Pipe而创建了InputChannel类,可以说,InputChannel是Pipe的Android版。 InputChannel类有两个基本作用,一是保原创 2015-01-16 14:26:21 · 3970 阅读 · 0 评论 -
Android入门之在客户进程中注册InputChannel
上文说到,在InputChannel被创建后,紧接着就是注册InputChannel,看以下代码:if (outInputChannel != null) { String name = win.makeInputChannelName(); InputChannel[] inputChannels = InputChannel.openInputChannelPair(name); w原创 2015-01-16 15:23:45 · 4096 阅读 · 0 评论 -
Android入门之客户窗口获取消息的时机
首先得知道:无论是Key消息还是Motion消息,都是通过pipe传递到客户窗口的,所有的客户进程都有一个主线程,即ActivityThread类,该类每次开始时就会进入到一个Looper循环中,然后就不断地从MessageQueue中读取消息,如果没有消息则进入到wait状态,直到下一个消息。 而在Android2.3版本中,MessageQueue对象都会在native环境中原创 2015-01-16 16:19:34 · 1357 阅读 · 0 评论 -
Android入门之把窗口信息传递给InputDispatcher
当窗口信息变化时,就应该把变化后的窗口信息传递给InputDispatcher,所以,从“什么时候会改变窗口信息入手”,这些变化的可能有: (1) 窗口大小发生变化时; (2) 窗口从显示变为隐藏,或隐藏变为显示时; (3) 暂停或恢复对消息的处理时; (4) 窗口层值发生变化时; (5) 添加或删除窗口时;原创 2015-01-15 18:13:10 · 3207 阅读 · 0 评论 -
Ubuntu编译Android源码之安装JDK
第一步:从Oracle的官网上下载jdk的Linux版本,例如jdk-6u30-linux-x64.bin;第二步:进入root环境,执行:su - root其中,root是你的超级管理员;第三步:安装jdk,将jdk-6u30-linux-x64.bin文件复制到你的安装目录,我的是/opt,然后执行以下命令:cd /opt./jdk-6u30-linux-原创 2014-12-29 10:37:11 · 911 阅读 · 0 评论 -
Android入门之WmS中处理消息的时机
用户消息可分为两类,一类是Key消息,另一类是Motion消息。在Android2.3版本的消息系统设计中,对于Motion消息,InputDispatcher会使用pipe直接把消息发往客户窗口,WmS类不能对这些消息进行任何的前置(pre)处理,而对于Key消息,则会首先回调WmS中的Key消息处理函数,在WmS中不处理该消息时,才把消息发往客户窗口中。在一般情况下,WmS中仅处理一些系统Ke原创 2015-01-16 15:48:52 · 2665 阅读 · 0 评论 -
Ubuntu编译Android源码之安装Eclipse
第一步:至eclipse.org下载eclipse安装包,例如eclipse-java-luna-SR1-linux-gtk-x86_64.tar.gz;第二步:安装eclipse,解压即可,例如我的安装目录为/opt,则将tar.gz文件复制到此目录下,然后执行:tar -zxvf eclipse-java-luna-SR1-linux-gtk-x86_64.tar.gz执行原创 2014-12-29 10:42:17 · 1184 阅读 · 0 评论 -
Ubuntu编译Android源码之编译
第一步:分别执行以下命令:sudo apt-get updatesudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev libc6-dev sudo apt-get install lib32ncurses5-dev x11proto-core-dev libx11原创 2014-12-29 10:51:59 · 898 阅读 · 0 评论 -
Android入门之窗口类型
从WmS的角度看,一个窗口并不是Window类,而是一个View类。WmS收到用户消息后,需要把消息派发到窗口,View类本身并不能直接接收WmS传递过来的消息,真正接收用户消息的必须是IWindow类,而实现IWindow类的是ViewRoot.W类,每一个W内部都包含了一个View变量。 WmS并不介意该窗口(View)是属于哪个应用程序的,WmS会按一定的规则判断哪个窗口处原创 2015-01-16 17:19:25 · 13914 阅读 · 0 评论 -
Android入门之addWindow
前面说到,应用程序添加窗口时,会在本地创建一个ViewRoot,然后通过IPC(进程间通信)调用WmS的Session的addWindow请求WmS创建窗口,下面来看看addWindow方法。 addWindow方法定义在frameworks/base/services/java/com.android.server.WindowManagerService.java中,其代码如原创 2015-01-15 17:31:50 · 4473 阅读 · 0 评论 -
Android入门之从输入设备中获取消息——窗口创建过程
上文讲到消息获取过程,本文来详细看代码。 我们说窗口创建时会创建本地的ViewRoot,然后调用WmS的addWindow方法,所以我们首先来看看WmS的代码。 你会看到frameworks/base/services/java/com/android/server/WindowManagerService.java中,没有公开的构造子,但有一个main方法,我原创 2015-01-07 11:15:25 · 1633 阅读 · 0 评论 -
Android入门之从输入设备中获取消息——综述
Android2.3中的消息获取过程如下所示:这里涉及到以下名词: (1) 客户窗口ViewRoot:应用程序添加窗口时,会在本地创建一个ViewRoot对象,也就是说ViewRoot对象的数量与窗口数量一致; (2) Pipe:Linux的Pipe机制,也就是管道,Android2.3使用Pipe传递ViewRoot和InputDispatcher原创 2015-01-06 19:56:46 · 1146 阅读 · 0 评论 -
Android中的Service
Android中的Service分为两类,一类是本地Service,一类是远程Service,访问方式也有两种,一种是startService,一种是bindService。startService和bindService的生命周期不同,如下图所示:LocalService要求实现android.app.Service,可按调用方式实现相关方法,如若用startService调原创 2014-12-23 17:04:28 · 1041 阅读 · 0 评论 -
BroadcastReceiver的两种实现方式
BroadcastReceiver是Android中的广播接收者,既然有接收,自然就有发送,首先看如下发送程序:Intent broadInt = new Intent("myChannel");broadInt.putExtra("message", "我发送了一则通知!");sendBroadcast(broadInt);这段代码写在Activity中即可,例如绑定在按钮的点击事件原创 2014-12-23 16:11:51 · 1896 阅读 · 0 评论 -
Android的ContentProvider(二)
接下来是getType方法,此方法参数是URI,根据Uri返回不同的MimeType:@Overridepublic String getType(Uri uri) { switch (uriMatcher.match(uri)) { case COLL_TYPE_URI_MATCHER: { return Book.ContentType.COLL_TYPE; } case原创 2014-12-24 09:36:38 · 683 阅读 · 0 评论 -
Android的ContentProvider(一)
这里描述的自然是自定义ContentProvider,不讲原理,只讲实现。实现ContentProvider有以下几个步骤:1. 继承android.content.ContentProvider实现自定义ContentProvider;2. 在AndroidManefist.xml中注册ContentProvider;3. 使用自定义ContentProvider。建原创 2014-12-23 17:34:58 · 802 阅读 · 0 评论 -
Android的ContentProvider(三)
自定义ContentProvider后,接下来是对它的使用,我们还是在Activity中使用它。首先是新增:ContentValues cv = new ContentValues();cv.put(Book.Columns.NAME, name);cv.put(Book.Columns.AUTHOR, author);Uri insertedUri = getContentRes原创 2014-12-24 10:10:34 · 602 阅读 · 0 评论 -
Android入门之在WmS中注册InputChannel
上文描述了InputChannel的创建过程,在WmS的addWindow中,创建InputChannel后紧接着的是注册InputChannel:if (outInputChannel != null) { String name = win.makeInputChannelName(); InputChannel[] inputChannels = InputChannel.openI原创 2015-01-16 14:57:33 · 1722 阅读 · 0 评论 -
Ubuntu编译Android源码之导入Eclipse
第一步:在已编译的android-4.4.2_r1文件夹下,找到文件development/ide/eclipse/.classpath,将之复制到android-4.4.2_r1下,.classpath内容大约如下所示:原创 2014-12-31 09:40:41 · 2722 阅读 · 0 评论