文档介绍:Android线程模型与service简介
徐涛
Copyright 2007-2008 Farsight.
All rights reserved.
大纲
} 1. 线程介绍
} 2. 用java创建一个线程
} 3. android的线程模型
}
线程简介
} 一般来说,我们把正在计算机中执行的程序叫做"进
程"(Process) ,而不将其称为程序(Program)。所谓"
线程"(Thread),是"进程"中某个单一顺序的控制流。
} 从os的角度看,进程是资源分配的单位,线程是
调度的基本单位
} 常见的操作系统如linux,windows等都支持多线程。
并且一般来说,一个进程内都包含多个执行的线
程
线程简介
为什么需要多线程?
} 设想这样的场景:当你通过socket从一个网络读取
数据时,有时候会读不到数据,因为数据可能在
网络传输过程中被延迟了。如果程序阻塞在read
上,那么直到数据到达前它就什么都不能做。假
如用户界面上有一个按钮,并且用户在程序阻塞
时点击这个按钮,那么因为此时程序不能处理鼠
标事件,也不能执行与按钮事件相关连的处理方
法,所以什么都不会发生。这种使用户觉得程序
被挂起的情况会让用户感到沮丧。
} 我们需要额外的线程处理一些事物,而不是把什
么都交给主线程
线程简介
为什么要用多线程
•单线程模型会在没有考虑到它的影响的情况下引
起Android应用程序性能低下,因为所有的任务都
在同一个线程中执行,如果执行一些耗时的操
作,如访问网络或查询数据库,会阻塞整个用户
界面。当在执行一些耗时的操作的时候,不能及
时地分发事件,包括用户界面重绘事件。从用户
的角度来看,应用程序看上去像挂掉了。更糟糕
的是,如果阻塞应用程序的时间过长(现在大概
是5秒钟)Android会向用户提示一些信息,即打开
一个“应用程序没有相应(application not
responding)”的对话框。
线程简介
多线程的好处
²许多情况下,在一个程序中使用多线程是有益处
的:
²(Better Interaction with the
User)
²(Simulation of
Simultaneous Activities)
²(Exploitation of Multiple
Processors)
²,可以做其他事情(Do
Other Things While Waiting for Slow IO
Operations)
创建一个线程
android线程简介
} 在Android 里,在默认情况下,一个程序用到的各
种“组件”(如Activity,BroadcastReceiver 或Service
等)都会在同一个进程(Process)里执行,而且由该
进程的主线程负责执行之。
android线程简介
} 在Android 里,如果有特别指定,也可以让特定
“组件”在不同的进程里执行。无论这些组件在哪
一个进程里执行,默认情况下,他们都是由该进
程里的主线程来负责执行之。
android线程简介
} 主线程除了要处理Activity 的UI 事件,又要处理
Service 后台服务工作,通常会忙不过来。该如何
化解这种困境呢? 此时,多线程(Multi-thread)的
并行(Concurrent)派上用场了,其可以化解主线程
太过于忙碌的情形。也就是说,主线程可以诞生
多个子线程来分担其工作,尤其是比较冗长费时
的后台服务工作,例如播放动画的背景音乐、或
从网络上下载电影等。于是,主线程就能专心于
处理UI画面的事件了。