博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
IntentService 与ResultReceiver
阅读量:6812 次
发布时间:2019-06-26

本文共 3458 字,大约阅读时间需要 11 分钟。

from://

在google的I/O大会中关于“Writing zippy Android apps”,有讲过用IntentService的问题,但是因为API文档中对IntentService描述不是很详细,所以很少人使用IntentService。

android.app.IntentService
“IntentService is a base class for Services that handle asynchronous requests (expressed as Intents) on demand. Clients send requests through startService(Intent) calls; the service is started as needed, handles each Intent in turn using a worker thread, and stops itself
when it runs out of work. This 'work queue processor' pattern is commonly used to offload tasks
from an application's main thread. The IntentService class exists to simplify this pattern and take care of the mechanics. To use it, extend IntentService and implement onHandleIntent(Intent). IntentService will receive the Intents, launch a worker thread, and stop the service as
appropriate. All requests are handled on a single worker thread -- they may take as
long as necessary (and will not block the application's main loop), but only one request will be processed at a time.”
有很多种模式可以运用在RESTful Client(想要了解更多的RESTful Client的模式可以参见I/O大会Developing Android REST client applications,但是苦于没有具体demo可以参见),如果不是特别特别复杂的RESTful Web Service, 我们可以使用ResultReceiver 和 IntentService。
举个例子,你想从web service取一些数据:
1.    调用startService。
2.    service中开始操作处理,并且通过消息告诉activity处理已经开始。
3.    activity处理消息并且显示进度条
4.    service完成处理并且返回给activity需要的数据。
5.    activity处理数据。
6.    service通过消息告诉activity处理完成,并且kill掉自己。
7.    activity取得消息并且结束掉进度条。

activity代码:

Java代码   
  1. public class HomeActivity extends Activity implements ResultReceiver {   
  2.     public void onCreate(Bundle savedInstanceState) {   
  3.         ...   
  4.         final Intent intent = new Intent(Intent.ACTION_SYNC, null, this, QueryService.class);   
  5.         intent.putExtra("receiver", this);   
  6.         intent.putExtra("command", "query");   
  7.         startService(intent);   
  8.     }   
  9.   
  10.     public void onReceiveResult(int resultCode, Bundle resultData) {   
  11.         switch (resultCode) {   
  12.         case RUNNING:   
  13.             //show progress   
  14.             break;   
  15.         case FINISHED:   
  16.             List results = resultData.getParcelableList("results");   
  17.             // do something interesting   
  18.             // hide progress   
  19.             break;   
  20.         case ERROR:   
  21.             // handle the error;   
  22.             break;   
  23.     }   
  24. }  
public class HomeActivity extends Activity implements ResultReceiver {    public void onCreate(Bundle savedInstanceState) {        ...        final Intent intent = new Intent(Intent.ACTION_SYNC, null, this, QueryService.class);        intent.putExtra("receiver", this);        intent.putExtra("command", "query");        startService(intent);    }    public void onReceiveResult(int resultCode, Bundle resultData) {        switch (resultCode) {        case RUNNING:            //show progress            break;        case FINISHED:            List results = resultData.getParcelableList("results");            // do something interesting            // hide progress            break;        case ERROR:            // handle the error;            break;    }}

 service代码:

Java代码   
  1. public class QueryService extends IntentService {   
  2.     protected void onHandleIntent(Intent intent) {   
  3.         final ResultReceiver receiver = intent.getParcelableExtra("receiver");   
  4.         String command = intent.getStringExtra("command");   
  5.         Bundle b = new Bundle();   
  6.         if(command.equals("query") {   
  7.             receiver.send(STATUS_RUNNING, Bundle.EMPTY);   
  8.             try {   
  9.                 // get some data or something             
  10.                 b.putParcelableArrayList("results", results);   
  11.                 receiver.send(STATUS_FINISHED, b)   
  12.             } catch(Exception e) {   
  13.                 b.putString(Intent.EXTRA_TEXT, e.toString());   
  14.                 receiver.send(STATUS_ERROR, b);   
  15.             }       
  16.         }   
  17.         this.stopSelf();   
  18.     }   
  19. }  
本文转自wanqi博客园博客,原文链接:http://www.cnblogs.com/wanqieddy/p/3860388.html,如需转载请自行联系原作者
你可能感兴趣的文章
Android Intent的几种用法全面总结
查看>>
发布一个打飞机游戏
查看>>
Websocket 与 Socket.IO、Socket
查看>>
virtualization technology设置
查看>>
StackPanel 弹出菜单 ContextMenu
查看>>
Android FM模块学习之四源码分析(五)
查看>>
MySQL服务器安装完之后如何调节性能
查看>>
三个关键字
查看>>
TCP/IP详解学习笔记(9)-TCP协议概述
查看>>
【翻译】地形教程-简介
查看>>
什么是Docker
查看>>
生产CPU使用率180%问题排查
查看>>
一些 gem
查看>>
qt creator 添加调试工具
查看>>
springmvc拦截器
查看>>
三篇文章了解 TiDB 技术内幕 —— 谈调度
查看>>
JsonSort 对json排序
查看>>
MySQL常识篇
查看>>
一起学Java7新功能扩展——深入历险分享(一)
查看>>
关于parentNode和firstChild的一些坑
查看>>