IntentService和ResultReceiver的异步处理

1.在下载手机上从网络下载东西的时候会用到AsyncTask来方便处理,这里可以在用IntentService和ResultReceiver

对一些基本概念做一些了解:

IntentService:

IntentService是Service类的子类,用来处理异步请求。客户端可以通过startService(Intent)方法传递请求给IntentService,IntentService通过worker thread处理每个Intent对象,执行完所有的工作之后自动停止Service。

说明:worker thread处理所有通过传递过来的请求,创建一个worker queue,一次只传递一个intent到onHandleIntent中,从而不必担心多线程带来的问题。处理完毕之后自动调用stopSelf()方 法;默认实现了Onbind()方法,返回值为null;

它是Service、HandlerThread和Handler的强强联合。具有任务队列,顺序处理,

当处理完全部任务后

模式实现了StartCommand()方法,这个方法会放到worker queue中,然后在onHandleIntent()中执行0

使用IntentService需要两个步骤:

1、写构造函数

2、复写onHandleIntent()方法

好处:处理异步请求的时候可以减少写代码的工作量,比较轻松地实现项目的需求

ResultReceiver:

Generic interface for receiving a callback result from someone. Use this by creating a subclass and implement onReceiveResult(int, android.os.Bundle), which you can then pass to others and send through IPC, and receive results they supply with send(int, android.os.Bundle).

这是API上给的解释,说白了就是处理传过来的信息。和BroadCastReceiver一样的。

2.下面给一个例子:

1).调用startService。
2).service中开始操作处理,并且通过消息告诉activity处理已经开始。
3).activity处理消息并且显示进度条(进度条就不显示了,就打印出一段话即可)
4).service完成处理并且返回给activity需要的数据。
5).activity处理数据。
6).service通过消息告诉activity处理完成,并且kill掉自己。
7).activity取得消息并且结束掉进度条。

代码如下:

QueryService:

 public class QueryService extends IntentService {

     public QueryService() {
super("service");
} public final String action = "query";
/**
* 进行一些网络操作,如下载文件等
*/
@Override
protected void onHandleIntent(Intent intent) {
System.out.println("进了service");
final ResultReceiver receiver = intent.getParcelableExtra("receiver");
String command = intent.getStringExtra("command");
Bundle bundle = new Bundle();
bundle.putString("data", "查询到的数据 ");
if (command.equals("query")) {
receiver.send(1, bundle);
try {
// do something with data
receiver.send(2, new Bundle()); } catch (Exception e) {
e.printStackTrace();
receiver.send(3, new Bundle()); } }
this.stopSelf();
}
}

MainActivity:

 public class MainActivity extends Activity {

     @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.button).setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this,
QueryService.class);
intent.putExtra("command", "query");
intent.putExtra("receiver", new MyResultReceiver(new Handler()));
MainActivity.this.startService(intent);
}
});
} // 对主界面进行一些修改
private class MyResultReceiver extends ResultReceiver {
private final int QUERY = 1, DELETE = 2, ERROR = 3; public MyResultReceiver(Handler handler) {
super(handler);
} @Override
protected void onReceiveResult(int resultCode, Bundle resultData) {
super.onReceiveResult(resultCode, resultData); switch (resultCode) {
case QUERY:
System.out.println("query+query+query+query+query"
+ resultData.getString("data"));
break;
case DELETE: System.out.println("delete+delete+delete+delete+delete+delete");
break;
case ERROR:
System.out.println("error+error+error+error+error+error+");
break; } }
} }

运行后的效果是:

aaarticlea/png;base64,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" alt="" />

从而可以知道顺序是:点击button -->> 启动QueryService  -->>根据传来的command执行相应功能-->> 执行完成以后发送广播给MainActivity告诉它执行后的结果-->>更新界面或则数据展示

代码下载:代码

android IntentService和ResultReceiver的异步处理的更多相关文章

  1. Android IntentService分析

    IntentService其实是一个很通用的知识点,最近看了下阿里巴巴Android开发手册,再次记录下 阿里巴巴Android开发手册 [强制]避免在 BroadcastReceiver#onRec ...

  2. Android线程管理之AsyncTask异步任务

    前言: 前面几篇文章主要学习了线程以及线程池的创建与使用,今天来学习一下AsyncTask异步任务,学习下AsyncTask到底解决了什么问题?然而它有什么弊端?正所谓知己知彼百战百胜嘛! 线程管理相 ...

  3. Android IntentService完全解析 当Service遇到Handler

    一 概述 大家都清楚,在Android的开发中,凡是遇到耗时的操作尽可能的会交给Service去做,比如我们上传多张图,上传的过程用户可能将应用置于后台,然后干别的去了,我们的Activity就很可能 ...

  4. Android IntentService的使用和源码分析

    引言 Service服务是Android四大组件之一,在Android中有着举足重轻的作用.Service服务是工作的UI线程中,当你的应用需要下载一个文件或者播放音乐等长期处于后台工作而有没有UI界 ...

  5. IntentService 与ResultReceiver

    from://http://lyzhanghai.iteye.com/blog/947504 在google的I/O大会中关于“Writing zippy Android apps”,有讲过用Inte ...

  6. Android IntentService的使用和源代码分析

    引言 Service服务是Android四大组件之中的一个,在Android中有着举足重轻的作用.Service服务是工作的UI线程中,当你的应用须要下载一个文件或者播放音乐等长期处于后台工作而有没有 ...

  7. 【转载】Android IntentService使用全面介绍及源码解析

    一 IntentService介绍 IntentService定义的三个基本点:是什么?怎么用?如何work? 官方解释如下: //IntentService定义的三个基本点:是什么?怎么用?如何wo ...

  8. android官方开源的高性能异步加载网络图片的Gridview例子

    这个是我在安卓安卓巴士上看到的资料,放到这儿共享下.这个例子android官方提供的,其中讲解了如何异步加载网络图片,以及在gridview中高效率的显示图片此代码很好的解决了加载大量图片时,报OOM ...

  9. 实现在Android简单封装类似JQuery异步请求

    在android开发中经常会使用异步请求数据,通常会使用handler或者AsyncTask去做,handler 配合message 使用起来比较麻烦,AsyncTask 线程池只允许128个线程工作 ...

随机推荐

  1. Redis官方文档》持久化

    原文链接 译者:Alexandar Mahone 这篇文章从技术层面描述了Redis持久化,建议所有读者阅读.如果希望更多了解Redis持久化和持久性保障,建议阅读Redis持久化揭秘. Redis ...

  2. 《PYTHON学习手册》(《Learing Python》--Mark Lutz)书摘

    1. Python是为了让脚本的质量等级再提升几个级别. 2. <learning Python>和<programming Python>反映了作者培训内容的两部分:核心语言 ...

  3. linux composer的使用

    安装好的composer使用很简单,分两步加载组件例1.搜索组件:composer search phpexcel2.下载组件:composer require 厂商名/包名然后在使用该插件的脚本中引 ...

  4. PHP生成唯一固定长度邀请码

    function create_invite_code() { $code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; $rand = $code[rand(0,25)] .str ...

  5. php爬虫神器cURL

    cURL 网页资源(编写网页爬虫) 接口资源 ftp服务器文件资源 其他资源 static public function curl($url, $data = array(), $timeout = ...

  6. 如何检测 51单片机IO口的下降沿

    下降沿检测,说白了就是满足这样一个逻辑,上次检测是1,这次检测是0,就是下降沿. 从这个条件可知,要确保能够正确检测到一个下降沿,负脉冲的宽度,必须大于一个检测周期,当负脉冲宽度小于一个检测周期,就有 ...

  7. Python3 持久化pickle模块

    pickle提供了一个简单的持久化功能.可以将对象以文件的形式存放在磁盘上. 1.pickle.dump(obj, file[, protocol]) 序列化对象,并将结果数据流写入到文件对象中.参数 ...

  8. windows重启mysql命令

    开始->运行->cmd 停止:net stop mysql 启动:net start mysql 前提MYSQL已经安装为windows服务

  9. 【转载】C# 从服务器下载文件

    支持并尊重原创!原文地址:https://www.cnblogs.com/GoCircle/p/6429136.html 一.//TransmitFile实现下载 protected void But ...

  10. Hadoop Serialization -- hadoop序列化详解 (2)

    回顾: 回顾序列化,其实原书的结构很清晰,我截图给出书中的章节结构: 序列化最主要的,最底层的是实现writable接口,wiritable规定读和写的游戏规则 (void write(DataOut ...