代码改变世界

随笔分类 -  Android

Android核心分析 之十一Android GWES之消息系统

2013-12-26 11:27 by kingshow, 194 阅读, 收藏, 编辑
摘要: Android GWES之Android消息系统 Looper,Handler,View 我们要理解Android的消息系统,Looper,Handle,View等概念还是需要从消息系统的基本原理及其构造这个源头开始。从这个源头,我们才能很清楚的看到Android设计者设计消息系统之意图及其设计的技术路线。 消息系统的基本原理 从一般的系统设计来讲,一个消息循环系统的建立需要有以下几个要素: 消息队列 发送消息 消息读取 消息分发 消息循环线程 首先来研究一下消息驱动的基本模型,我使用如下的图形来表示一个... 阅读全文

Android核心分析 之十Android GWES之基本原理篇

2013-12-26 11:14 by kingshow, 311 阅读, 收藏, 编辑
摘要: Android GWES基本框架篇 我这里的GWES这个术语实际上从Microsoft 的Window上移植过来的,用GWES来表示Android的窗口事件系统不是那么准确,在Android中Window是个弱化了的概念,更多的表现在View这个概念上。在很大程度上,Android的View的概念可以代替Microsoft Window这个概念,有点和Microsof暗中较劲的意味,你用过的概念我就偏不用,这个也是我以为的设计者意图。 原始GUI基本框架 首先我们从Android的SDK外特性空间开始,在编写Actvitiy时,我们都是面对的处理函数:OnXXXX(),例如有按键按下就... 阅读全文

Android核心分析 之九Zygote Service

2013-12-26 11:06 by kingshow, 251 阅读, 收藏, 编辑
摘要: Zygote Service 在本章我们会接触到这两个单词: Zygote [生物] 受精卵, 接合子, 接合体 Spawn:产卵 通过这两个单词,我们就可以大体知道Zygote是干什么的了,就是叫老母鸡下蛋。通过“Zygote”产出不同的子“Zygote”。从大的架构上讲,Zygote是一个简单的典型C/S结构。其他进程作为一个客服端向Zygote发出”孵化”请求,Zygote接收到命令就“孵化”出一个Activity进程来。 123.jpg (18.36 KB, 下载次数: 0)下载附件 保存到相册 2012-3-19 11:35 上传 Zygote系统代码组成及其调用结构:... 阅读全文

Android 核心分析 之八Android 启动过程详解

2013-12-26 10:46 by kingshow, 332 阅读, 收藏, 编辑
摘要: Android 启动过程详解 Android从Linux系统启动有4个步骤; (1) init进程启动 (2) Native服务启动 (3) System Server,Android服务启动 (4) Home启动 总体启动框架图如: 1.jpg (53 KB, 下载次数: 1)下载附件 保存到相册 2012-3-19 11:28 上传 第一步:initial进程(system/core/init) init进程,它是一个由内核启动的用户级进程。内核自行启动(已经被载入内存,开始运行,并已初始化所有的设备驱动程序和数据结构等)之后,就通过启动一个用户级程序init的方式,完成引... 阅读全文

Android 核心分析 之六 IPC框架分析 Binder,Service,Service manager

2013-12-26 10:21 by kingshow, 318 阅读, 收藏, 编辑
摘要: IPC框架分析 Binder,Service,Service manager 我首先从宏观的角度观察Binder,Service,Service Manager,并阐述各自的概念。从Linux的概念空间中,Android的设计Activity托管在不同的的进程,Service也都是托管在不同的进程,不同进程间的Activity,Service之间要交换数据属于IPC。Binder就是为了Activity通讯而设计的一个轻量级的IPC框架。 在代码分析中,我发现Android中只是把Binder理解成进程间通讯的实现,有点狭隘,而是应该站在公共对象请求代理这个高度来理解Binder,Ser... 阅读全文

Android 核心分析 之五基本空间划分

2013-12-26 10:17 by kingshow, 313 阅读, 收藏, 编辑
摘要: 基本空间划分 Google给了我们一张系统架构图,在这张图上我们可以看到Android的大体框架组成。 11.jpg (175.6 KB, 下载次数: 0)下载附件 保存到相册 2012-3-19 10:49 上传 从上图可以看到:Android Applications,Application Framework,Dalvik Virtual Machine,Linux。如果将Android泛化,我们可以将系统划分成两部分: 22.jpg (2.96 KB, 下载次数: 0)下载附件 保存到相册 2012-3-19 10:49 上传 但是为了研究的方便我们先看最为本质的三层,上面是A... 阅读全文

Android核心分析之四手机的软件形态

2013-12-26 10:15 by kingshow, 263 阅读, 收藏, 编辑
摘要: 手机的软件形态 上节我给出了手机的硬件树,本节将给出手机软件形态树。主要突出手机软件涵盖的内容。通过该思维导图,我们可以看到手机软件所涉及到的方方面面,Android所涉及到的内容也不会超过下面所示太多,这个也是Andoid系统外特性空间所要展示的,这个也是Android设计者需要考虑管理的大部分内容,通过下面的整理,我们可以让我们的思维更加贴近Android设计意图,从而更深入的了解Android中各种组成的由来,这个就是前面讲到的分析思想之一从退到源头出发,从思考最终极的问题开始。 1.jpg (84.22 KB, 下载次数: 6)下载附件 保存到相册 2012-3-19 10:45 .. 阅读全文

Android是什么 之三手机之硬件形态

2013-12-26 10:09 by kingshow, 260 阅读, 收藏, 编辑
摘要: 手机硬件形态 本节可能与Android无关,但是Android系统现在这个阶段更多的是移动终端形态的开发平台,本节给出了Android背后的工作-Android管理的硬件是什么,Android的本质就是要管理好这些硬件部分,为用户提供一个体验更好,速度更快的智能移动终端。对手机硬件形态的认识是要让我们对手机硬件组成有个感性的认识,让程序员知道系统中的代码是管理那一部分的,即我们堆砖头的目的是什么,让思维有一个伸展。 为了对手机这类嵌入式系统有一个较为深入的了解,我制作了如下的手机硬件结构思维导图,在这张图上我们可以看到组成手机硬件的有哪些,初步了解到手机管理平台为什么要那么多的管理框架和... 阅读全文

Android核心分析 之二方法论探讨之概念空间篇

2013-12-26 10:07 by kingshow, 228 阅读, 收藏, 编辑
摘要: 方法论探讨之概念空间篇 我们潜意识就不想用计算机的方式来思考问题,我们有自己的思维描述方式,越是接近我们思维描述方式,我们越容易接受和使用。各种计算机语言,建模工具,不外乎就是建立一个更接近人的思维方式的概念空间,再使用工具从该概念空间向另外一个概念空间映射,我称之为人性思维空间向01序列描述空间的一个映射。实现方面来看,系统就是一个翻译器,将机器性更加人性化的一种机制。大学计算机经典课“计算机体系结构”,其他的可以忘记,但是下面这个图不能忘记: 2.jpg (6.49 KB, 下载次数: 0)下载附件 保存到相册 2012-3-19 10:28 上传 这个就是概念空间最本质的原型体现:作.. 阅读全文

Android核心分析 之一分析方法论探讨之设计意图

2013-12-26 10:04 by kingshow, 585 阅读, 收藏, 编辑
摘要: 为什么要研究Android,是因为它够庞大,它够复杂,他激起了我作为一个程序员的内心的渴望,渴望理解这种复杂性。我研究的对象是作为手机开发平台的Android软件系统部分,而不是Dalvik虚拟机本身。 作为一个从其他平台装接过来的程序员,要从事Andoid平台系统开发,我的关于手机平台上积累的知识已经不能满足需要了,Android为我们带来了大量的新名词,Activity,Manifest,INTENT,Service,Binder,Dalvik虚拟机,Framework,Linux,Navtive ,JNI…。通过在源代码,在开发社区,在开发博客,甚至在招聘过程中,我不断的寻求Andr.. 阅读全文

Android.mk文件语法规范

2013-12-25 17:40 by kingshow, 407 阅读, 收藏, 编辑
摘要: Android.mk是Android提供的一种makefile文件,用来指定诸如编译生成so库名、引用的头文件目录、需要编译的.c/.cpp文件和.a静态库文件等。要掌握jni,就必须熟练掌握Android.mk的语法规范。一、Android.mk文件的用途一个android子项目中会存在一个或多个Android.mk文件1、单一的Android.mk文件直接参考NDK的sample目录下的hello-jni项目,在这个项目中只有一个Android.mk文件2、多个Android.mk文件如果需要编译的模块比较多,我们可能会将对应的模块放置在相应的目录中,这样,我们可以在每个目录中定义对应的A 阅读全文

Gallery slide OOM issue

2013-12-19 19:19 by kingshow, 1 阅读, 收藏, 编辑
该文被密码保护。 阅读全文

Android的推送机制

2013-12-11 16:12 by kingshow, 374 阅读, 收藏, 编辑
摘要: 其实我们要用推送服务的情况还挺多:1,站内性 其实是可以用推送实现的,互相点对点的推送 当然这是在web上的,名字有点老土2,私信 这个微博的私信就是一种,值在页面右下角出来对话框形式的3,优惠发送到手机app上 很多app都来这个,推送些软件或者文章4,app和app之间的通信 聊天软件 微信 gtalk等以上几种服务的形式可分类成:1,server对server 站内信2,server对client 私信 优惠推送3,client对client 聊天工具 微信 gtalk其本质的原型是 N个client《------》server《-------》N个client client在登录后都会 阅读全文

Android 网络协议

2013-12-11 16:09 by kingshow, 607 阅读, 收藏, 编辑
摘要: Android对网络编程提供3中接口,即:Java接口,Apache接口,Android接口。Android提供了对 HTTP,SSL,Cookie,DHCP等协议的封装,并支持套接字编程,同时对UTI也提供了支持。另外,还提供了连接管理器和WiFI管理器来增强对网络的支持。1、HTTP协议:Android中HTTP协议的主要体现在android.net.http和org.apache.http等包中。在 android.net.http包中,主要通过AndroidHttpClient来实现HTTP协议,AndroidHttpClient实际上就是实现了org.apache.http.clie 阅读全文

Android--HTTP协议_例子

2013-12-11 16:08 by kingshow, 380 阅读, 收藏, 编辑
摘要: 前言 说到HTTP协议,那必须要说说WWW了,WWW是环球信息网(World Wide Web )的缩写,也可以简称为Web,中文名字为“万维网”。简单来说,WWW是以Internet作为传输媒介的一个应用系统,WWW网上基本的传输单位是Web网页。WWW的工作是基于B/S模型,由Web浏览器和Web服务器构成,两者之间采用超文本传输协议HTTP协议进行通信。 HTTP协议是基于TCP/IP协议之上的协议,是Web浏览器和Web服务器之间的应用层的协议,是通用的、无状态的面向对象的协议。关于HTTP协议的详细讲解,请参见博客:HTTP协议详解,里面讲解的很清楚,这里主要是说明HTTP在Ja.. 阅读全文

Android-Http协议

2013-12-11 16:06 by kingshow, 211 阅读, 收藏, 编辑
摘要: Http协议 超文本传输协议,为无状态协议,基于请求和响应,有两个版本1.0,1.1,分别为短连接和长连接. 短连接(http1.0默认):连接网络-->请求-->响应-->断开连接....连接网络-->请求-->响应-->断开连接.... 长连接(http1.1默认):连接网络-->请求-->响应-->请求-->响应-->请求-->响应....断开连接....请求和响应的格式 请求: a.请求行 (请求方式Method 资源路径 http版本号)-->(Get http://www.sohu.com/Default 阅读全文

Android 内存泄漏调试

2013-12-11 09:58 by kingshow, 295 阅读, 收藏, 编辑
摘要: 一、概述 1二、Android(Java)中常见的容易引起内存泄漏的不良代码 1(一) 查询数据库没有关闭游标 2(二) 构造Adapter时,没有使用缓存的 convertView 3(三) Bitmap对象不在使用时调用recycle()释放内存 4(四) 释放对象的引用 4(五) 其他 5三、内存监测工具 DDMS --> Heap 5四、内存分析工具 MAT(Memory Analyzer Tool) 7(一) 生成.hprof文件 7(二) 使用MAT导入.hprof文件 8(三) 使用MAT的视图工具分析内存 8一、概述Java编程中经常容易被忽视,但本身又十分重要的一个问题 阅读全文

Android应用的LOG分析

2013-12-11 09:43 by kingshow, 961 阅读, 收藏, 编辑
摘要: 之前两篇文章之后,打算再分享一点儿经验 :之前文章见这里:1, 全看懂了-加两年经验-语音朗读-语音识别-语音控制软件源码2,学生作品-配置NDK集成开发环境全过程第一版这次打算通过一个例子,深入解析一下log的分析方法以及Handler对象,Android多线程及MediaPlayer状态分析 。先在此占位,边写边发 。特别注意,本文的内容全部是原创,经验所得 。特别是Log分析方法,网上搜了一下,没有Log的分析方法文章,特此贡献一下,希望对程序员有帮助。特别声明一下, 本文章的Word版本也已经在里面了 。 一,Bug出现了 , 需要“干掉”它 (update on Jan. 17)今天 阅读全文

Android获取其他包的Context实例然后做坏事

2013-12-11 09:13 by kingshow, 241 阅读, 收藏, 编辑
摘要: Android中有Context的概念,想必大家都知道。Context可以做很多事情,打开activity、发送广播、打开本包下文件夹和数据库、获取classLoader、获取资源等等。如果我们得到了一个包的Context对象,那我们基本上可以做这个包自己能做的大部分事情。那我们能得到吗?很高兴的告诉你,能!Context有个createPackageContext方法,可以创建另外一个包的上下文,这个实例不同于它本身的Context实例,但是功能是一样的。这个方法有两个参数:1。packageName 包名,要得到Context的包名2。flags 标志位,有CONTEXT_INCLUDE_ 阅读全文

Android完全关闭(退出)应用程序

2013-12-11 08:42 by kingshow, 2199 阅读, 收藏, 编辑
摘要: 在一些android应用中,有时候,需要应用完全关闭,也就是把整个应用程序完全结束掉。一个简单的方法!首先:private void Exit() { ActivityManager activityMgr= (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE); activityMgr.restartPackage(getPackageName()); } 然后,AndroidManifest.xml中添加对应权限。但是,这个方法其实在2.2以前是可以的.2.2以后使用的是:public void kill... 阅读全文