【Android论文栏目提醒】:网学会员鉴于大家对Android论文十分关注,论文会员在此为大家搜集整理了“多线程技术在android手机开发中的应用 - 期刊论文”一文,供大家参考学习
2012 年第 1 期 信息通信 2012 (总第 117 期) INFORMATION COMMUNICATIONS (Sum. No 117) 多线程技术在
android 手机开发中的应用 闫 伟,叶建栲 浙江 金华 321004) (浙江师范大学数理与信息工程学院, 在 摘要:
android 应用开发中, 而 程序运行的流畅性尤为重要,
android 默认的情况下,程序都是在一个线程中运行的, 如 果一个任务耗时比较长, 就会导致主程序无响应,这样一来就会影响程序的运行的流畅性, 因此在
android 应用开发中使 用多线程技术尤为重要, 本文就是用一个多线程下载软件来阐明多线程技术在
android 开发中的应用。
关键词:
android;主线程;多线程 中图分类号:TP311.1 文献标识码:A 文章编号: ( 1673-1131 2011)0046-02
Android 是 google 公司于 2007 年推出的专门用于移动设 理器。
提供一种一致的和非打断性的机制来通知用户。
备的操作系统,该系统一经推出便在移动操作系统中如日中 (4)应用程序层。
Android 随系统一起发布了一组核心的天,凭借其开源免费, 短短三年就达到了 40的市场占有率, 应用程序, 包括 email 客户端、SMS 短信应用、地图服务、浏览很多厂商都采用了该系统, 三星、 索尼爱立信、 HTC、 摩托罗拉, 器、通信录,所有的应用都是基于 java 语言开发的。
都借此机会重整旗鼓, 在未来的移动终端市场占有一席之地。
该系统功能强大, 开源免费, 由操作系统、 用户界面和 中间件、应用软件组成。
随着科技水平的进步,移动终端已经取代了电脑的大部分功能, 所以未来的互联网是移动互联网的时代,
android 开发也是程序员发展的新方向。
Android 开发的主要语言是 java,java 是支持多线程的, 理所当然,
android 平台也支持多线程的, 在开发中使用多线程, 能很大程度地提高程序的执行效率,使硬件资源得到充分利用, 所以掌握多线程编程,是从事
android 开发的必备条件。
1
android 系统组成
Android 的系统架构如图 1 所示, 它是由 linux 内核、 and-roid 运行时环境和各种库、 应用程序框架、 应用程序层、 自底向上四层构成。
(1)linux 内核层。
它是整个
android 的核心, 一些核心服 图 1 应用程序层图务,如硬件驱动程序、 电源管理、进程管理、 内存管理都是由 lin- 2
android 中的多线程技术ux2.6 内核来处理, 它还在硬件和软件栈的其它部分之间提供 一个成熟
android 应用程序, 至少要包括以下几点, 运行了一个抽象层。
速度快、 响应快速、程序状态转换连贯流畅、 而在这当中 安全, (2)
android 运行时环境和库。
库是运行在内核之上的, and- 最重要就是响应速度。
一个
android 应用程序由松散耦合的 如roid 包含了各种 c/c核心库, libc 和 SSL, 以及用来播放音 组件组成, 并由应用程序清单绑定到一起, 应用程序清单描述频和视频的多媒体库, 用来管理外观和显示的外观管理器, 用 了每一个组件以及它们之间的交互方式,一个应用程序由以于支持 2D, 图形的 SGL 和 OpenGL 的图形库, 3D 用于支持本 下基本的结构模块构成。
地的 SQLite,用于集成 Web 浏览器和 internet 安全的 SSL 和 (1)活动(activity)应用程序的表示层。
活动使用视图来Webkit。
android 运行时可以让一个
android 手机从本质上与一 形成显示信息和响应用户动作的图形界面,一个活动包括一个移动 linux 区别开来,
android 运行时包含了一个核心库和 ( 个 UI 用户界面) 。
Dalvil 虚拟机, 它是向应用程序提供动力的引擎, 它和库形成 服务 (2) (service) 应用程序中不可见的工作者。
服务组件了应用程序的框架基础。
每一个
android 应用程序都在它自 在后台运行, 它们可以更新数据源和可见的活动, 并触发通知。
己的进程中运行, 拥有一个独立的 Dalvik 虚拟机实例, 它依赖 (3)内容提供器。
一个可共享的数据存储器。
内容提供器于 linux 内核进行线程和底层内存管理。
用来管理和共享应用数据库, 实现多个程序之间进行数据共享。
(3)应用程序框架。
应用程序框架提供了用来创建
android 意图 (4) (intent) 一个应用程序之间传递消息的桥梁。
通应用程序的各种 API, 它对硬件访问提供了一般的抽象, 并管 过意图, 可以在系统范围内向目标活动或者服务广播消息, 以理用户界面和应用程序资源。
android 开发者可以调用 API 进 说明执行某个动作的意图。
行开发应用程序。
每一个应用后面都有一系列的服务,包括 (5)广播接收器 (broadcast receiver)意图广播的接收者。
以下几个方面: ①视图。
用于创建应用程序, 包括表、 文本框、 通过创建和注册广播接收器,应用程序可以监听到匹配特定按钮、内嵌的浏览器。
②内容提供者。
允许应用程序进行数 过滤器的意图广播,广播接收器会自动启动应用程序响应某据共享,例如通信录的共享。
③活动管理器。
管理活动的生 个意图, 这个特点使其成为事件驱动应用程序的最佳选择。
命周期,以及提供常用的回退功能。
④资源管理器。
提供程 在这些组件中,展现给用户以及和用户进行交互的就是序所需要的资源文件, 包括图标、 图片、布局文件。
⑤通知管 活动提供的 UI 用户界面。
Android 应用程序通常是运行在 46信息通信 闫伟等:多线程技术在
android 手机开发中的应用一个单独的线程里。
这意味着应用程序所做的事情如果在主 progressBar.setMaxloader.getFileSize线程里占用了太长的时间的话, 就会引发 ANR (应用程序无响 try 应)对话框,因为应用程序并没有给自己机会来处理输入事件 loader.downloadnew DownloadProgressListener 或者意图广播, 这样一来就会造成程序响应速度变慢, 在这种 Override情况下,就需要把那些耗费时间比较多的事情放到一个新的 public void onDownloadSizeint size线程中进行, 等到这些事情完成之后, 将刷新主 UI 的消息发 //实时获知文件已经下载的数据长度送给主线程, 对主 UI 进行更行,这个过程如图 2 所示。
这就 Message msg new Message需要用到多线程。
一个典型的例子就是在下载文件的时候, msg.what 1如果一个文件很大的话, 就需要很长时间, 这就不能把这个过 msg.getData.putIntsize size程放在主线程中进行, 需要开启新的子线程来完成, 下面就通 handler.sendMessagemsg//向主线程发送刷新消息过这个例子说明多线程在
android 开发中的应用。
整个软件的架构如图 2 所示。
打开用户主界面,会有一 个输入文件地址的文本输入框, 用户输入网址后,点击确定按 catch Exception e 钮,就会开始下载文件, 这时就会开启多个子线程来完成下载 handler.obtainMessage-1.sendToTarget任务,在这个过程中子线程以消息的方式, 将下载进度发给主 线程, 主线程接收到消息后进行刷新主界面。
.start 整个下载任务都在子线程中进行,在主线程中创建一个 子线 handler 对象用 handleMessage 方法接收子线程中的消息, 程通过创建的 message 用 sendMessage 方法往主线程发送信 在 息,
android 中就是通过 handler 进行线程间的通信,使多个 线程同时执行,这样把任务和界面刷新分离开来,避免出现 ANR (应用程序无响应) 的现象,从而使应用程序流畅运行。
图 2 软件的架构图 4 结语3 具体的实现过程 对 本文通过对
android 系统的整体结构进行了分析, and- 当手机和网络服务器建立连接后,就会开启新的子线程 roid 应用程序的组成进行了大致的描述, 提出解决避免应用出执行下载任务。
核心代码如下所示: 现 ANR (应用程序无响应) 就是使用多线程编程, 的方法, 首先 //主线程 在主线程中定义 handler,并为这个 handler 实现 handleMessage public class DownloadActivity extends Activity 方法, 然后在子线程中调用主线程的 handler,通过其 sendMes- private EditText downloadpathText sage 方法发送消息。
把耗时较多的任务放在子线程中进行, private TextView resultView 这种技术是开发中不可或缺的,在联网的应用程序和手机游 private ProgressBar progressBar 戏中表现得尤为重要。
//当 Handler 被创建会关联到创建它的当前线程的消息队 参考文献:列,该类用于往消息队列发送消息 1 张海燕.JAVA 多线程技术在手机互联网中的应用J.农业 //消息队列中的消息由当前线程内部进行处理 ( : 网络信息2008 3) 97-99. private Handler handler new Handler 2 Reto Meier王超译.
Android2 高级编程M.北京:清华大 //接收子线程发送的消息 学出版社2010. Override 3 于志龙郑名杰.
Android SDK 开发范例大全M.北京: 清 public void handleMessageMessage msg 华大学出版社2009. switch msg.what 4 公磊 周聪. 基于
Android 的移动终端应用程序开发与应 case 1: ( : 用J.计算机与现代化2008 8) 85-89. progressBar.setProgressmsg.getData.getIntsize 5 姚昱昱 刘卫国.
Android 的架构与应用开发研究 J. 计算 …… ( : 机系统应用2008 11) 110-112. resultView.setTextresult 6 李兴华.JAVA 开发M.北京: 清华大学出版社2009. …… //开启新线程执行下载任务 浙江省大学生新苗人才项目, 项目基金: 项目编号为 2010R404055。
private void downloadfinal String path final File savedir 闫伟 , 陕西旬阳人, 作者简介: (1985-) 男, 硕士在读,研究方向 new Threadnew Runnable 为计算机应用。
Override public void run 47