android开发教程软件开发中handler怎样理解?

android四大组件 android的四大组件 android 组件 android常用组件 android 4大组..
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
Android应用程序开发之三——四大组件
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口评论-1793&
trackbacks-0
  本文主要介绍Android中Handler的简单使用方法,Handler跟多线程,消息队列联系很紧密,在平常的实际程序开发中比较常见。本文分为4个简单的例子来学校handler。
  参考资料为Mars老师的教程,.
  开发环境为android4.1.
& & & 这个例子是最简单的介绍handler使用的,是将handler绑定到它所建立的线程中.
  本次实验完成的功能是:单击Start按钮,程序会开始启动线程,并且线程程序完成后延时1s会继续启动该线程,每次线程的run函数中完成对界面输出nUpdateThread...文字,不停的运行下去,当单击End按钮时,该线程就会停止,如果继续单击Start,则文字又开始输出了。
  软件界面如下:
  单击Start后会有如下显示:
实验主要部分代码和注释(附录有工程code下载链接):
MainActivity.java:
package com.example.handler1;
import android.app.A
import android.os.B
import android.os.H
import android.view.M
import android.view.V
import android.view.View.OnClickL
import android.widget.B
import android.widget.TextV
public class MainActivity extends Activity {
private TextView text_view = null;
private Button start = null;
private Button end = null;
//使用handler时首先要创建一个handler
Handler handler = new Handler();
//要用handler来处理多线程可以使用runnable接口,这里先定义该接口
//线程中运行该接口的run函数
Runnable update_thread = new Runnable()
public void run()
//线程每次执行时输出"UpdateThread..."文字,且自动换行
//textview的append功能和Qt中的append类似,不会覆盖前面
//的内容,只是Qt中的append默认是自动换行模式
text_view.append("\nUpdateThread...");
//延时1s后又将线程加入到线程队列中
handler.postDelayed(update_thread, 1000);
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
text_view = (TextView)findViewById(R.id.text_view);
start = (Button)findViewById(R.id.start);
start.setOnClickListener(new StartClickListener());
end = (Button)findViewById(R.id.end);
end.setOnClickListener(new EndClickListener());
private class StartClickListener implements OnClickListener
public void onClick(View v) {
// TODO Auto-generated method stub
//将线程接口立刻送到线程队列中
handler.post(update_thread);
private class EndClickListener implements OnClickListener
public void onClick(View v) {
// TODO Auto-generated method stub
//将接口从线程队列中移除
handler.removeCallbacks(update_thread);
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
activity_main.xml:
&LinearLayout xmlns:android="/apk/res/android"
xmlns:tools="/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" &
android:id="@+id/text_view"
android:layout_width="fill_parent"
android:layout_height="200dip"
android:text="@string/hello_world"
tools:context=".MainActivity" /&
android:id="@+id/start"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/start"
android:id="@+id/end"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/end"
&/LinearLayout&
  这个例子比刚才那个例子稍微复杂些。因为这个例子中用到了handler的消息队列机制,即通过handler中一个线程向消息队列中用sendMessage方法发送消息,发送的消息当然可以用来传递参数。在handler中用handleMessage来处理消息,处理方法是获得消息队列中的消息参数,用这些参数来完成另外一些功能。
  本实验实现的是当开始按钮按下时,会启动一个线程,并绑定到handler中,该线程发送带有参数的message到handler的消息队列中,消息队列的另一端获取该消息,并且用该消息的参数来更新进度条。
  软件打开后:
  单击Start按钮后,更新的进度条结果如下(怎么感觉4.1版本android进度条那么小呢?不懂该怎么设置):
实验主要部分代码和注释(附录有工程code下载链接):
MainActivity.java:
package com.example.handler2;
import android.app.A
import android.os.B
import android.os.H
import android.os.M
import android.view.M
import android.view.V
import android.view.View.OnClickL
import android.widget.B
import android.widget.ProgressB
public class MainActivity extends Activity {
private ProgressBar progress_bar = null;
private Button start = null;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
progress_bar = (ProgressBar)findViewById(R.id.progress_bar);
start = (Button)findViewById(R.id.start);
start.setOnClickListener(new StartOnClickListenr());
private class StartOnClickListenr implements OnClickListener
public void onClick(View v) {
// TODO Auto-generated method stub
//让进度条显示出来
progress_bar.setVisibility(View.VISIBLE);
//将线程加入到handler的线程队列中
update_progress_bar.post(update_thread);
//创建一个handler,内部完成处理消息方法
Handler update_progress_bar = new Handler()
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
//super.handleMessage(msg);
//显示进度条
progress_bar.setProgress(msg.arg1);
//重新把进程加入到进程队列中
update_progress_bar.post(update_thread);
};//不加这个分号则不能自动添加代码
Runnable update_thread = new Runnable()
int i = 0;
public void run() {
// TODO Auto-generated method stub
//首先获得一个消息结构
Message msg = update_progress_bar.obtainMessage();
//给消息结构的arg1参数赋值
msg.arg1 =
//延时1s,java中的try+catch用来排错处理
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO: handle exception
e.printStackTrace();
//把消息发送到消息队列中
update_progress_bar.sendMessage(msg);
if(i == 100)
//把线程从线程队列中移除
update_progress_bar.removeCallbacks(update_thread);
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
activity_main.xml:
&RelativeLayout xmlns:android="/apk/res/android"
xmlns:tools="/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" &
android:id="@+id/start"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:text="@string/start"
&ProgressBar
android:id="@+id/progress_bar"
android:layout_width="fill_parent"
android:layout_height="100dip"
android:layout_alignParentTop="true"
style="?android:attr/progressBarStyleHorizontal"
android:visibility="gone"
&/RelativeLayout&
  上面2个例子表面上看handler使用了post方法启动了runnbale,其实启动的线程和activity主线程是同一个线程,因为它只是运行了线程的run方法,而不是start方法。Mars老师实验3的目的是为了验证仅使用handler的post方法是否处于同一个线程。
  该实验在主activtiy的onCreate函数中打印了2条关于本线程的信息,然后创建一个handler并为它绑定一个线程,在线程的run方法中也打印了线程的信息,观察2者的信息是否一样。
  结果如下:
  说明这2个线程确实是同一线程,并且可以看出主界面中的文字大概过了10s才显示出来,因为语句setContentView(R.layout.activity_main);放在了handler的post启动语句后面,而handler绑定的线程中又延时了10s,所以同时也证明了只有是同一个线程才会出现这种情况。
程序主要代码和注释如下(附录有工程code下载链接):
MainActivity.java:
package com.example.handler3;
import android.app.A
import android.os.B
import android.os.H
import android.view.M
public class MainActivity extends Activity {
//新建一个handler
private Handler handler = new Handler();
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//将runnable加载到handler的线程队列中去
handler.post(r);
Thread t = new Thread(r);
t.start();
setContentView(R.layout.activity_main);
//打印activtiy线程信息
System.out.println("activity_id----&"+Thread.currentThread().getId());
System.out.println("activity_name----&"+Thread.currentThread().getName());
Runnable r = new Runnable()
public void run() {
// TODO Auto-generated method stub
//打印新建线程信息
System.out.println("handler_id----&"+Thread.currentThread().getId());
System.out.println("handler_name----&"+Thread.currentThread().getName());
//延时10s,为了观察主界面中内容出现的时间
Thread.sleep(10000);
} catch (InterruptedException e) {
// TODO: handle exception
e.printStackTrace();
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
  如果把语句:
  handler.post(r);
  换成:
  Thread t = new Thread(r);
  t.start();
  其它的不变,则程序运行时主界面内容立刻就显示出来了,且系统输出如下:
  这2者都说明这样绑定的线程与它所在的activity线程就不是同一个线程了。
  这个例子将学会怎样不使用runnable来启动一个线程,而是用HandlerThread的looper来构造一个handler,然后该handler自己获得消息,并传递数据,然后又自己处理消息,当然这是在另一个线程中完成的。
  消息结构中传递简单的整型可以采用它的参数arg1和arg2,或者传递一些小的其它数据,可以用它的object,该object可以是任意的对象。当需要传送比较大的数据是,可以使用消息的setData方法,该方法需要传递一个Bundle的参数。Bundle中存放的是键值对的map,只是它的键值类型和数据类型比较固定而已。
  实验输出如下所示:
程序主要代码和注释如下(附录有工程code下载链接):
MainActivity.java:
package com.example.handler4;
import android.app.A
import android.os.B
import android.os.H
import android.os.HandlerT
import android.os.L
import android.os.M
import android.view.M
public class MainActivity extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
System.out.println("activity_ID----&"+Thread.currentThread().getId());
//新建一个HanderThread对象,该对象实现了用Looper来处理消息队列的功能
HandlerThread handler_thread = new HandlerThread("handler_thread");
handler_thread.start();
//MyHandler类是自己继承的一个类,这里采用hand_thread的Looper来初始化它
MyHandler my_handler = new MyHandler(handler_thread.getLooper());
//获得一个消息msg
Message msg = my_handler.obtainMessage();
//采用Bundle保存数据,Bundle中存放的是键值对的map,只是它的键值类型和数据类型比较固定而已
Bundle b = new Bundle();
b.putString("whether", "晴天");
b.putInt("temperature", 34);
msg.setData(b);
//将msg发送到自己的handler中,这里指的是my_handler,调用该handler的HandleMessage方法来处理该mug
msg.sendToTarget();
class MyHandler extends Handler
//空的构造函数
public MyHandler()
//以Looper类型参数传递的函数,Looper为消息泵,不断循环的从消息队列中得到消息并处理,因此
//每个消息队列都有一个Looper,因为Looper是已经封装好了的消息队列和消息循环的类
public MyHandler(Looper looper)
//调用父类的构造函数
super(looper);
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
System.out.println("Handler_ID----&"+Thread.currentThread().getId());
System.out.println("Handler_Name----&"+Thread.currentThread().getId());
//将消息中的bundle数据取出来
Bundle b = msg.getData();
String whether = b.getString("whether");
int temperature = b.getInt("temperature");
System.out.println("whether= "+whether+" ,temperature= "+temperature);
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
  总结:
  Android中的handler可以用来完成异步的消息出来,即发送消息和接收消息相互独立,可以同时运行。在例1和例2中,实际上handler中使用的线程是与它所在的activity处于同一个主线程,因为handler中调用的runnable接口是直接运行该接口的run函数的,而不是start函数。例3专门比较了这2中情况。例4学会使用怎样在新线程中处理消息的方法。
  附录:。
阅读(...) 评论()
阿萨德发斯蒂芬扫一扫下载手机客户端
扫描我,关注团购信息,享更多优惠
||网络安全
| | | | | | | | | | | | | | | |
||电子电工
汽车交通| | | | | | | | | |
||投资理财
| | | | | | | | | | | | | | | | |
| | | | | | |
| | | | | | | | | | | | | | | | | | |
| | | | | | |||
||外语考试
| | | | | | | | |
| 视频教程|
深入理解Android:Telephony原理剖析与最佳实践
定价:¥69.00
校园优惠价:¥49.68 (72折)
促销活动:
商品已成功飞到您的手机啦!快登录手机站看看吧!
下载客户端
> 微信关注“互动出版网”,便捷查询订单,更多惊喜天天有
ISBN:1上架时间:出版日期:2013 年1月开本:16开页码:329版次:1-1
所属分类:
  经典畅销书“深入理解Android”系列新作,资深专家撰写,51CTO等社区强烈推荐!
从源码角度深入解析Telephony的架构设计与实现原理,深刻揭示Android系统的通信机制!
《深入理解Android:Telephony原理剖析与最佳实践》是“深入理解Android”系列的第3本,前两本书的内容和质量在Android开发者社群内得到了高度认可,已经树立起该系列图书的品牌。在写作思路和方式上,本书与前两本书一脉相承,对它们的优点进行了继承和发扬;在内容上,本书从从源代码角度深入解析了Android Telephony的架构设计与实现原理,深刻揭示了Android系统的通信机制。对于Android应用开发工程师和系统工程师而言,本书都是难得的研究和学习资料。
全书共13章,分为五部分:第一部分(1~3章),首先介绍了智能手机的系统结构、Android系统的架构、Telephony框架的结构,然后详细介绍了Android源代码编译环境和阅读环境的搭建方法,以及阅读本书要做的技术准备;第二部分(4~6章),对Android的通话功能进行了深入的分析,包括对通话流程的分析、对主动拨号和来电流程的分析、对通话应用机制的分析,以及对手机通信功能在框架层和应用层中的实现机制的分析;第三部分(7~9章),对Android的通信功能进行了深入的分析,包括对网络服务状态的运行机制的分析、对Android手机上网的实现机制的分析,以及对短息发送和接收流程的分析;第四部分(10~12章),对Android RIL的工作机制进行了深入的分析,包括对框架层中的RILJ运行机制的分析、对RILC系统结构及LibRIL运行机制的分析,以及对Reference-RIL框架的原理的分析;第五部分(13章),分析了Telephony模块所提供的系统服务,包括系统服务的注册入口以及调用系统服务接口的实例。
杨青平,资深Android系统工程师和软件开发工程师,热衷于Android用源代码和系统原理的研究,对Android的系统架构、设计原理以及Telephony和Framework等核心功能模块的工作机制有非常深入的研究。目前就职于国内领先的Android OS提供商ThunderSoft(中科创达),担任系统架构师。他对J2EE、UML、设计模式等相关技术,以及电信增值业务、电子商务、物联网等重要软件行业的运行模式、业务发展规划也有较深入的了解。此外,他还是一位经验丰富的讲师,有多年的人才培训经验,善于总结和分享。
《深入理解Android:Telephony原理剖析与最佳实践》
第一部分 基础篇
第1章 初识Android / 2
1.1 智能手机的系统结构 / 2
1.2 Android系统架构 / 3
1.2.1 应用层 / 3
1.2.2 应用框架层 / 4
1.2.3 系统运行库层 / 5
1.2.4 核心层 / 6
1.3 Android Telephony框架结构 / 6
1.3.1 系统运行库层的HAL层 / 7
1.3.2 简析HAL结构 / 8
1.3.3 Android为什么引入HAL / 9
1.3.4 Android中HAL的运行结构 / 9
1.4 本章小结 / 10
第2章 搭建Android源代码编译环境 / 11
2.1 Ubuntu Linux操作系统及工具安装 / 11
2.1.1 PC配置建议 / 12
  随着ICT技术的推广和发展,在三网融合、智慧的地球(物联网)等概念风行的形势下,手机终端技术的发展和进步可谓日新月异;Android经受住了市场的考验,并占据了较大的市场份额,从手机芯片厂家、手机生产厂家到各种应用开发公司、互联网公司等,逐步形成了以Android系统平台为核心的上下游产业链。正是由于Android源代码的开源,各大手机厂商才能通过深度定制Android系统平台,在降低研发成本的同时,快速推出具有自身特色的Android智能手机产品。因此,各大手机厂家在推出新版本Android系统平台手机上投入了较多的研发成本,其中不乏SamSung、Motorola等国际知名公司;国内如小米手机、联发科、展讯等也都有自己的Android研发团队。
  目前国内市场上针对Android的书籍很多,但这些书籍中,绝大多数是基于Android SDK在应用层的开发进行讲解的。针对Android系统级的源代码分析的书籍,主要是邓凡平著的《深入理解Android:卷Ⅰ》和《深入理解Android:卷Ⅱ》,但深入理解Android Telephony的书籍国内目前还是空白。而Telephony基本通信功能是手机中的核心,在定制Android手机的过程中也不例外,手机离开了基本通信能力,如通话、短彩信、手机上网等功能,也就失去了它本身的意义。
  在Android手机定制化的过程中,Telephony涉及的范围和内容也非常多,从应用层到框架层,再到RIL与Modem无线通信模块的交互,所有部分均有不同程度的定制和优化,因此,在Android手机平台定制化研发的过程中,需要对Android Telephony有全面而深入的理解。
  本书以Android 4.0.3源代码为基础,全面、深入地解析了Android Telephony涉及的主要内容,其中包括Call通话、ServiceState接入网络服务状态、DataConnection手机上网数据连接以及SMS&MMS短信和彩信的应用等,并且详细解析了Android RIL的运行机制。
  读者对象
  本书主要适合于以下读者。
  (1)Android应用的普通开发者
  对于Android应用开发工程师来说,本书中关于发起通话呼叫、接收到新的来电、发送短信、接收新短信、手机上网等Telephony涉及的通信能力的介绍,能帮助他们在编写Android应用程序时,选择最优方式完成多种场景的应用。比如如何发起通话呼叫、如何发送短信、如何监听或接收新来电或新短信的通知等,都是Android应用程序需要处理的消息和事件。
  (2)Android 系统平台的定制开发者
  Android Telephony涉及的通信能力,常常是Android系统平台定制化过程中的重点和难点,它的可用性和稳定性决定了手机产品是否能成功量产。本书全面、深入地讲解了Android Telephony涉及的通信能力的实现流程和机制。
  (3)对Android源代码有浓厚兴趣的读者
  Android源代码中汇集了很多国外专家和优秀工程师的设计思想和理念,本书对Android Telephony源代码中的关键设计模式、设计思路做了详细分析,读者可拓展思考和训练,以提升自己的设计水平和编码能力。
  (4)开设相关课程的大专院校的师生
  从搭建Android的编译环境到分析源代码的过程,本书由浅入深地进行了讲解,阅读本书可帮助读者提升Linux操作系统的动手能力、Java语言的编码能力、UML的阅读能力和理解常见的设计模式,了解Android系统平台定制的主要工作内容。
  如何阅读本书
  全书分为5个部分,共13章:
  第一部分(第1~3章)首先介绍Android和智能手机的框架结构,帮助读者了解一些手机的发展历程;然后讲解Android源代码的编译环境搭建过程,并普及Android中的一些技术基础。
  第二部分(第4~6章)详解Android Telephony通话功能。首先整体认识通话功能在整个Android系统平台所处的位置,及每层的主要作用;然后分析通话的关键流程,主要体现在主动拨号流程和来电流程的过程分析;最后解析通话功能在应用层和框架层中的实现机制和逻辑。
  第三部分(第7~9章)详解ServiceState(网络服务状态)、DataConnection(手机上网数据连接)、SMS和MMS的业务实现流程,以及在应用层和框架层中的关键处理逻辑和实现机制。
  第四部分(第10~12章)首先讲解Android RIL框架结构和关键业务流程,然后详细解析RILJ、RILC和Reference-RIL的运行机制。
  时至今日,移动互联网对人们的影响已无须多言,开放的Android更加快了移动互联网的繁荣,也带动了整个产业链的发展。因为Android,智能手机已不再是高高在上的贵族,并开始迅速走入平常百姓家。Android智能手机的爆发式发展和逐步从功能手机转向Android智能手机的厂商,催生了大量的从业人员需求,熟悉Android智能手机开发,特别是熟悉Android Telephony开发的技术人员越来越受到市场的青睐。
  Telephony模块作为一个智能手机的核心部件,是区别移动OS与桌面OS的重要标志。虽然Android脱胎于Linux,但是在普通Linux中并不存在,对于很多从Java或者Linux开发转型而来的人员来说,Telephony显得陌生而神秘,而且Telephony由于其固有的通信复杂度,以及与环境和硬件的较大关联性,一直是Android智能手机开发中的硬骨头,也是所有智能手机项目所必须克服的一个堡垒。在此之前,市面上还没有专门讲解Telephony的书籍, 现在由于青平的倾力奉献,完成了这本高度专业化的书籍。本书以实际代码为例,结合青平一直以来在Telephony领域的实战经验,娓娓道来,详细介绍了Telephony的系统架构和运行机制。相信本书一定能成为您深入理解Telephony的一把钥匙。
  最后,在此还要表示对青平的谢意和敬意,谢谢他长期以来为ThunderSoft作出的努力和贡献。同时对青平在长期繁忙的工作之余,挤出所有的业余时间完成了这本书所表现出来的毅力和决心表示由衷的敬意,也以ThunderSoft有这样的员工而自豪。
  中科创达软件科技(北京)有限公司成都分公司总经理常衡生
  于成都
  华章公司出版的“深入理解Android”系列图书以分析Android的源代码为主,包含应用、框架、专题和内核四个部分,本书是专题部分的第一本书。本书的研究重点是Android的Telephony相关模块,它们也是Android体系结构中相对独立的一部分。分析难度较大,因为涉及的面较广,需要掌握的专业知识也比较多。青平兄结合2年多的实际工作经验,精心总结和整理了这本拥有完整知识框架、条理清晰、理论和实战结合的专题书籍,全方位、多角度向读者展示了Android Telephony体系结构的工作流程和相关原理。同时,该书秉承了“深入理解Android”系列图书高标准、高质量的传统,并展现了作者作为一位川籍软件工程师所拥有的追逐细节的品质和开阔的思路。
  ――邓凡平 《深入理解Android 卷I/卷II》作者/Tieto公司高级软件架构师
  伴随着《深入理解Android:卷II》的上市,“深入理解Android”系列图书在Android图书市场引起了更大的反响,获得了更好的口碑,已经建立起了自己的品牌。本书继承了该系列图书的所有优点,宏观上将模块的架构和设计思路整理得非常清晰,微观上则将模块的工作机制和实现原理分析得细致入微。无论你是关心Android系统通信功能的应用开发者,还是要对Android系统进行定制或移植的系统工程师,只要能跟随作者的思路,吃透本书的内容,你都会游刃有余!
  ――51CTO移动开发频道(/)
  Android为移动设备而生,对于移动设备而言,通信是最重要的功能,同时也是最复杂的功能。对于应用开发工程师而言,如果能深入了解Telephony的通信功能和原理,就能在开发Android应用时选择最优的方式完成相关功能的开发;对于系统工程师而言,通信能力是Android系统平台定制化过程中的重点和难点,它的稳定性和性能直接决定了设备是否能量产。本书从源码的角度深入分析了Telephony的通信机制和实现原理,对于应用开发工程师和系统开发工程师而言,都是不可多得的参考资料。
  ――安卓巴士(/) 做最好的Android开发社区
  第一部分
  基础篇
  第1章初识Android
  第2章搭建Android源代码编译环境
  第3章主要技术准备
  第1章初识Android
  Android中文意思为“机器人”,中文翻译为“安卓”,是Google于日发布的基于Linux平台的开源手机操作系统的名称。该平台由操作系统、中间件、用户界面和应用软件组成,被称为首个为移动终端打造的真正开放和完整的移动软件。Google与电信运营商、手机设备制造商、芯片开发商以及其他有关方面结成深层次的合作伙伴关系,希望借助建立标准化、开放式的移动电话软件平台,在移动产业内形成一个开放式的生态系统。
  从2007年到现在,Android已经成为全球最热门的手机操作平台之一。本章主要从智能手机的基本硬件结构、Android手机操作系统整体架构和Android的Telephony模块的体系结构这三个方面介绍Android,特别将Android手机操作系统平台下的Telephony模块作为本书讲解的重点内容。
  1.1智能手机的系统结构
  Android手机的基本硬件结构是符合智能手机的基本硬件结构,我们要学习Android移动开发,首先需要了解智能手机的硬件系统基本结构。
  随着通信领域的快速发展,移动终端发展和变化也非常巨大,已经由原来单一的通话、短信功能向彩信、数据上网、图像处理、音乐和多媒体方向综合演变。目前,市面上的移动手机基本上可以分成两大类:一类是功能手机(Feature Phone),另一类是智能手机(Smart Phone)。
  这两类手机是如何区分的呢?智能手机具有传统手机的基本功能,如电话、短信、照相等功能,同时具有开放的操作系统、硬件和软件的可扩充性,并且支持第三方的二次开发。相对于功能手机,智能手机就像计算机一样,可通过安装第三方软件来扩展其功能和应用,因此,智能手机越来越受到人们的青睐,成为手机终端市场的一种潮流。
  智能手机采用的硬件基本结构如图1-1所示。
  智能手机的硬件基本结构大多采用双处理器架构:主处理器和从处理器。主处理器运行开放式操作系统以及操作系统之上的各种应用,负责整个系统的控制;从处理器负责基本无线通信,主要包括DBB(Digital Baseband,数字基带芯片)和ABB(Analog Baseband,模拟基带),完成语音信号和数字语音信号调制解调、信道编码解码和无线Modem控制。
  图1-1智能手机的硬件结构
  主处理器也叫AP(Application Processor,应用处理器),从处理器也叫BP(Baseband Processor,基带处理器),它们之间通过串口、总线或USB等方式进行通信,不同手机芯片生产集成厂家采用的集成方式都不一样,目前市面上仍以串口通信为主。
  不难发现,在智能手机的基本硬件结构中,BP部分只要再加一定的外围电路,如音频芯片、LCD控制、摄像机控制器、扬声器、天线等,就是一个完整的智能手机的硬件结构。
  注意现在我们能区分功能手机与智能手机吗?回顾手机终端的发展历程,不难发现这样一条规律:随着手机芯片处理能力的提升、上网能力的扩展和发展(蓝牙、Wi-Fi、3G网络),手机应用得到了非常迅速的扩大和发展。在智能手机的硬件设计上,应采用处理能力比较强大的处理器作为AP,用以支持开放手机操作系统及操作系统之上的扩展应用,由此可见智能手机的发展趋势和方向。
  1.2Android系统架构
  前面学习了智能手机的基本硬件结构,可以通过功能手机与智能手机的特点和区别从本质上认识它们。Android智能手机操作系统作为运行在AP上的开源智能手机操作系统,其系统架构是什么样的呢?我们先看看图1-2。
770)this.width=770;' />
同类热销商品¥108.00¥81.00
订单处理配送
北京奥维博世图书发行有限公司 china-pub,All Rights Reserved}

我要回帖

更多关于 android开发教程 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信