`
ictch
  • 浏览: 131674 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Android Framework系列之IPC(二)

阅读更多

对于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:

Java代码  收藏代码
  1. package waterlife.ipc.demo;  
  2.   
  3. import java.io.InputStream;  
  4. import java.net.MalformedURLException;  
  5. import java.net.URL;  
  6. import java.net.URLConnection;  
  7.   
  8. import android.app.Activity;  
  9. import android.os.AsyncTask;  
  10. import android.os.Bundle;  
  11. import android.widget.ProgressBar;  
  12.   
  13. public class myAsyncTask extends Activity {  
  14.     static ProgressBar pb;  
  15.     /** Called when the activity is first created. */  
  16.     @Override  
  17.     public void onCreate(Bundle savedInstanceState) {  
  18.         super.onCreate(savedInstanceState);  
  19.         setContentView(R.layout.main);  
  20.         pb = (ProgressBar)findViewById(R.id.ProgressBar01);  
  21.         Download dl = new Download();  
  22.         dl.execute();  
  23.     }  
  24.         
  25.     public class Download extends AsyncTask<Void, Integer, Void>  
  26.     {  
  27.   
  28.         @Override  
  29.         protected Void doInBackground(Void... params) {  
  30.             // TODO Auto-generated method stub  
  31.             int totalSize = 0;  
  32.             InputStream recevier = null;  
  33.             try {  
  34.                 URL myUrl = new URL("http://bbs.nju.edu.cn/");  
  35.   
  36.                 URLConnection urlConn = myUrl.openConnection();  
  37.                 totalSize = urlConn.getContentLength();  
  38.                 recevier = urlConn.getInputStream();  
  39.                 byte[] b =new byte[256];  
  40.                 int length = 0;  
  41.                 length += recevier.read(b);  
  42.                 while(length < totalSize)  
  43.                 {  
  44.                     length += recevier.read(b);  
  45.                     publishProgress((int)(length*100/totalSize));  
  46.                 }  
  47.                 recevier.close();  
  48.             } catch (MalformedURLException e) {  
  49.                 // TODO Auto-generated catch block  
  50.                 e.printStackTrace();  
  51.             }catch (Exception ex)  
  52.             {  
  53.                 ex.printStackTrace();  
  54.             }  
  55.             return null;  
  56.         }  
  57.           
  58.         protected void onProgressUpdate(Integer... progress) {  
  59.             pb.setProgress(progress[0]);  
  60.         }  
  61.     }  
  62. }  

在这个Demo中只有第二和第三步,只有第二个参数params,是一个整型参量,把下载数据包的进度更新给UI Progressbar显示。

 

另外,使用AsyncTask需要注意以下几点:

1. AsyncTask的实例只能在UI线程中创建;

2. dl.execute()方法只能在UI线程中调用,并且只能调用一次,否则会抛异常。

分享到:
评论

相关推荐

    Deep Dive into Android IPC-Binder Framework

    Deep Dive into Android IPC-Binder Framework 深入Android IPB/Binder 框架

    android-framework-hal

    4.1 如何加入 API 至 Android Framework 4.2 如何编译并制作独立 JAR 档 4.3 上机实验:开发LedService API 与制作mokoid.jar 程式库 5.JNI & Runtime Library 5.1 什么是 JNI 5.2 如何撰写 JNI & Native Method ...

    Deep Dive into Android IPC & Binder.pdf

    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 ...

    Android代码-简单易用的安卓进程间通信IPC框架

    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 ...

    Android的IPC机制——Binder

    android技术内幕--系统卷,第三章Android的IPC机制,关于Binder通信机制,详细讲解,并附有framework层代码说明,

    android开发与介绍

    Android 简介 Android开发环境 Android 开发基础 Android Application 开发细节 Android Framework Android 线程通信/ IPC 通信 Andorid 整合开发

    Android内训教程资料

    Android内训教程,包括Android 简介 Android开发环境 Android 开发基础 Android Application 开发细节 Android Framework Android 线程通信/ IPC 通信 Andorid 整合开发

    Android深入浅出之Binder机制.pdf

    Android系统最常见也是初学者最难搞明白的就是Binder了,很多很多的Service就是通过Binder机制来和客户端通讯交互的。所以搞明白Binder的话,在很大程度上就能理解程序运行的流程。我们这里将以MediaService的例子来...

    Android_IPC

    Android中的Binder通信是基于Service与Client的,所有需要IBinder通信的进程都必须创建一个IBinder接口,系统中 有一个进程管理所有的system service,Android不允许用户添加非授权的System service,当然现在源码开发...

    Android代码-Android

    Deep Dive into Android IPC:Binder Framework android与linux的关系 (看前几页PPT就好了) Android的匿名共享内存机制是在内核实现的,也是基于Linux内核本身的共享内存机制,作了一层封装。Android提供了匿名共享...

    Android驱动开发权威指南

    19.3.1 Android IPC通信补充 19.3.2 Android USB Mass Storage流程分析 第20章Bootloader引导子系统 20.1 Bootloader流程分析 20.1.1 Bootloader概述 20.1.2 U-Boot启动流程分析 20.2 Bootloader修改指南 20.2.1开机...

    Android IBinder.pdf

    This doc tells you that how the IBinder IPC at Google Android framework works, using 1 ezxample code....

    高焕堂之五本android中文书

    高焕堂之五本android中文书: AndroidBook_001_GraphicThinking_V2.0 AndroidBook_002_EIT_Framework_V2.0 AndroidBook_003_ThreadModel_V2.0 AndroidBook_004_IPC_Binder_V2.0 AndroidBook005_JNI_Skills_V1.0

    Fuzz技术的挖掘Android漏洞和如何防御经验分享-供大家学习研究参考

    它继承了IBinder接口 从IPC角度来说,Binder是Android中的一种跨进程通信方式,Binder还可以理解为一种虚拟的物理设备,它的设备驱动是/dev/binder,该通信方式在Linux中没有 从Android Framework角度来说,...

    Android核心分析

    Android 核心分析 之二 ------- 方法论探讨之概念空间篇 .............................................. 3 Android 是什么 之三 ------- 手机之硬件形态 ..........................................................

    新版Android开发教程.rar

    ----------------------------------- Android 编程基础 1 封面----------------------------------- Android 编程基础 2 开放手机联盟 --Open --Open --Open --Open Handset Handset Handset Handset Alliance ...

    android平台sensor从底层到上层流程介绍.doc

    值得从事android hal层开发的人一看。 从这个图来看Sensor的架构还是非常的清淅, 黄色部分表示硬件,它要挂在I2C总线上 红色部分表示驱动,把驱动注册到Kernel的Input Subsystem上,然后通过Event Device把Sensor...

    Android传感器MotionSensor开发实验.pdf

    d) Android应⽤框架(ANDROIDFRAMEWORK) 应⽤程序框架是指定义了⼀个应⽤程序运⾏所必须的全部功能组件,开发者也可以访问核⼼应⽤程序所使⽤的API框架。在Android系统中, 开发⼈员也可以完全访问核⼼应⽤程序所使⽤...

    professional.Android.Application.Development.2009.pdf

    Introducing the Development Framework 11 What Comes in the Box 12 Understanding the Android Software Stack 12 The Dalvik Virtual Machine 14 Android Application Architecture 14 Android Libraries ...

    drozer-agent:Mercury安全评估框架的Android代理

    drozer允许您通过承担应用程序的角色并与Dalvik VM,其他应用程序的IPC端点和基础操作系统进行交互来搜索应用程序和设备中的安全漏洞。 drozer提供了可帮助您使用,共享和理解Android公共漏洞利用的工具。 它可以...

Global site tag (gtag.js) - Google Analytics