对于Android的IPC来说,除了Handler和Looper之外,还有另外一种简便的方法来实现多线程的通信,那就是AsyncTask。AsyncTask是一个异步的方法,它允许背景运算并把结果更新到前台的UI线程之上。要实现一个AsyncTask主要有4个步骤,但并不是每一个步骤都是必需的。
这四个步骤是:
onPreExecute() 执行背景运算前任务的初始化;
doInBackground(Params...)这是AsyncTask最核心的函数,即是做背景运算;它在第一步完成之后被调用,通常在这步中还会调用方法publishProgress(Progress...)将运算结果更新到UI主线程上;
onProgressUpdate(Progress...)是在publishProgress(Progress...)调用之后被执行的,需要注意到是这步执行的时间是未定的,通常在这一步中会更新相关UI;
onPostExecute(Result)这一步同样是和UI相关,将运算结果Result当作参数传递给UI。
大家可能已经注意到AsyncTask除了四大步之外,还有三个重要的参数:AsyncTask<Params, Progress, Result>。三个参数为通用类型,Params是传给任务初始化的参数,Progress是做背景运算过程中和UI交互的参数,Result是背景运算传递给UI的结果。
利用好这四大步和三个参数,我们可以方便的写出上节例子中的Demo:
package waterlife.ipc.demo;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.widget.ProgressBar;
public class myAsyncTask extends Activity {
static ProgressBar pb;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
pb = (ProgressBar)findViewById(R.id.ProgressBar01);
Download dl = new Download();
dl.execute();
}
public class Download extends AsyncTask<Void, Integer, Void>
{
@Override
protected Void doInBackground(Void... params) {
// TODO Auto-generated method stub
int totalSize = 0;
InputStream recevier = null;
try {
URL myUrl = new URL("http://bbs.nju.edu.cn/");
URLConnection urlConn = myUrl.openConnection();
totalSize = urlConn.getContentLength();
recevier = urlConn.getInputStream();
byte[] b =new byte[256];
int length = 0;
length += recevier.read(b);
while(length < totalSize)
{
length += recevier.read(b);
publishProgress((int)(length*100/totalSize));
}
recevier.close();
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}catch (Exception ex)
{
ex.printStackTrace();
}
return null;
}
protected void onProgressUpdate(Integer... progress) {
pb.setProgress(progress[0]);
}
}
}
在这个Demo中只有第二和第三步,只有第二个参数params,是一个整型参量,把下载数据包的进度更新给UI Progressbar显示。
另外,使用AsyncTask需要注意以下几点:
1. AsyncTask的实例只能在UI线程中创建;
2. dl.execute()方法只能在UI线程中调用,并且只能调用一次,否则会抛异常。
分享到:
相关推荐
《Android Framework 开发揭秘》这本书深入剖析了Android系统的内部运作机制,是Android开发者提升技术深度的宝贵资料。它涵盖了从系统启动到服务框架的构建,再到关键组件的工作原理,旨在帮助读者理解和掌握...
其中,Binder是Android IPC框架的核心组件,它为对象导向的服务提供了一个高效的通信机制。 Binder框架为Android开发者提供了一个非常重要的机制,使得进程之间可以像调用本地对象的方法一样调用远程服务。这种方式...
《字节面试Android11.0最新Framework解析》是一份专为程序员面试准备的资料,主要聚焦于Android系统的深层机制,特别是针对Android 11.0版本的Framework层进行了深入剖析。Framework是Android系统的核心部分,它定义...
Android系统作为当今最流行的移动操作系统之一,拥有庞大的开发者社区和丰富的系统组件,为开发者提供了强大的开发平台。了解和分析Android系统的工作原理以及它的框架结构对于开发高质量的应用程序至关重要。本文将...
2. 框架层(Framework):这一层是用Java编写的Android核心代码,提供了一系列的API供开发者使用。它包括了Android的Java核心库以及各种服务和扩展功能。 3. 库层:包含了许多原生库,这些库通常用C或C++编写,提供...
### Android Framework 详细分析 #### 一、设计意图与研究方法论 在开始对Android框架进行深入探索之前,我们首先要明确为什么要研究Android及其框架层。Android不仅是一个移动操作系统,更是一个集成了各种技术和...
Android Bluetooth Framework 应用层分析 AndroidBluetooth Framework 是 Android 操作系统中的蓝牙协议栈,负责管理蓝牙设备的连接、数据传输和蓝牙 Profile 的管理。整个蓝牙系统可以分为四个层次:蓝牙嵌入式...
Android Framework的复杂性与精妙设计是其成为全球最广泛使用的移动操作系统之一的关键。通过对框架核心组件的深入分析,我们不仅能更好地理解Android系统的运作机制,还能在开发过程中做出更优化的设计决策,提升...
Binder 机制是 Android Framework 中实现 IPC 的核心技术之一。它允许不同进程间的对象进行通信,从而实现了 Android 系统的模块化设计。Binder 机制主要包括以下几个方面: - **Binder 对象**:每个 Binder 对象都...
Android不仅仅是一个手机的代名词,它是一个完整的软件生态系统,包括手机开发平台、虚拟Java操作系统、开发社区、标准规范,以及包含着Activity、Manifest、Intent、Service、Binder、Dalvik虚拟机、Framework、...
在深入探讨Android Framework之前,我们首先要理解Android系统的基本构成和工作原理。Android作为一个开源的移动操作系统,其核心设计理念是开放性和可扩展性,这使得开发者能够深入理解和定制系统以满足不同需求。 ...
IPC/Binder Framework at Android Builders Summit 2013 Binder Overview IPC Advantages of Binder Binder vs Intent/ContentProvider/Messenger-based IPC Binder Terminology Binder Communication and ...
A smart, novel and easy-to-use framework for Android Inter-Process Communication (IPC). Chinese Readme 中文文档 Hermes is a smart, novel and easy-to-use framework for Android Inter-Process ...
IPC(Inter-Process Communication)框架是Android中用于进程间通信的一个重要组件,它包括Binder、Service、Servicemanager等概念。Binder是一种高效的远程过程调用(RPC)机制,它允许不同应用程序组件之间进行轻...
### Android核心剖析之Framework概述 #### 一、Framework框架概览 Android的Framework层作为操作系统的核心组成部分,扮演着连接硬件抽象层(HAL)与应用程序之间的桥梁角色,它不仅提供了丰富的API供开发者调用,...
这份名为"android_framework.ppt"的文档资料主要探讨了Android框架层的交互机制,特别是Android架构的层次、服务之间的通信方式,以及Binder IPC的工作原理。 首先,Android架构主要分为三层:App层、Runtime ...
### Android Framework 层面的核心技术解析 #### 一、引言与设计意图 在深入了解Android框架之前,我们首先需要理解其设计背后的核心理念。本文档旨在揭示Android框架的设计初衷及其实现方式,帮助读者从宏观角度...
2. Binder IPC:Binder是一种进程间通信(IPC)机制,它允许Android的不同组件之间相互通信,包括应用组件、系统服务和其他进程。Binder IPC机制是实现Android组件间通信的基础。 3. 线程操作:Android中的线程操作...