Android官方开发文档Training系列课程中文版:后台服务之响应IntentService的处理结果

原文地址:https://developer.android.com/training/run-background-service/report-status.html

这节课主要学习如何将IntentService中的执行结果返回给请求点。一种推荐的方式就是使用 LocalBroadcastManager来实现,它会将所广播的Intent限制在APP内部。

发送IntentService的处理结果

为了可以将IntentService的处理结果发送给其它组件,首先需要创建一个Intent对象,并将执行结果放入该Intent内。

接下来要做的就是:将刚才创建好的Intent通过LocalBroadcastManager.sendBroadcast()发送出去。但凡是对该Intent注册了的,那么发送该Intent都会收到结果。可以通过getInstance()获取LocalBroadcastManager的实例。

例子如下:

public final class Constants {...// Defines a custom Intent actionpublic static final String BROADCAST_ACTION ="com.example.android.threadsample.BROADCAST";...// Defines the key for the status "extra" in an Intentpublic static final String EXTENDED_DATA_STATUS ="com.example.android.threadsample.STATUS";...
}
public class RSSPullService extends IntentService {
.../** Creates a new Intent containing a Uri object* BROADCAST_ACTION is a custom Intent action*/Intent localIntent =new Intent(Constants.BROADCAST_ACTION)// Puts the status into the Intent.putExtra(Constants.EXTENDED_DATA_STATUS, status);// Broadcasts the Intent to receivers in this app.LocalBroadcastManager.getInstance(this).sendBroadcast(localIntent);
...
}

下一步就是如何处理接收到的Intent对象了。

接收IntentService的处理结果

如果需要接收广播出来的Intent,那么就需要用到BroadcastReceiver了。在BroadcastReceiver的实现类中重写onReceive()方法。当LocalBroadcastManager将相应的Intent对象广播出来后,那么该方法就会被自动回调。

举个例子:

// Broadcast receiver for receiving status updates from the IntentService
private class ResponseReceiver extends BroadcastReceiver
{// Prevents instantiationprivate DownloadStateReceiver() {}// Called when the BroadcastReceiver gets an Intent it's registered to receive@public void onReceive(Context context, Intent intent) {
.../** Handle Intents here.*/
...}
}

一旦定义好了BroadcastReceiver,那么就可以为其定义指定的意图过滤器了。要做到这些,需要创建一个IntentFilter。下面的代码演示了如何定义一个过滤器:

// Class that displays photos
public class DisplayActivity extends FragmentActivity {...public void onCreate(Bundle stateBundle) {...super.onCreate(stateBundle);...// The filter's action is BROADCAST_ACTIONIntentFilter mStatusIntentFilter = new IntentFilter(Constants.BROADCAST_ACTION);// Adds a data filter for the HTTP schememStatusIntentFilter.addDataScheme("http");

为了将BroadcastReceiver以及IntentFilter注册到系统,需要先获取LocalBroadcastManager的实例,然后再调用它的registerReceiver()方法。下面的代码演示了这个过程:

        // Instantiates a new DownloadStateReceiverDownloadStateReceiver mDownloadStateReceiver =new DownloadStateReceiver();// Registers the DownloadStateReceiver and its intent filtersLocalBroadcastManager.getInstance(this).registerReceiver(mDownloadStateReceiver,mStatusIntentFilter);...

BroadcastReceiver可以同时处理多种类型的Intent对象,这项特性可以为每种Action定义不同的代码,而不需要专门去定义BroadcastReceiver。为同一个BroadcastReceiver定义另外的IntentFilter,只需再创建一个IntentFilter,然后再次注册一下就好:

        /** Instantiates a new action filter.* No data filter is needed.*/statusIntentFilter = new IntentFilter(Constants.ACTION_ZOOM_IMAGE);...// Registers the receiver with the new filterLocalBroadcastManager.getInstance(getActivity()).registerReceiver(mDownloadStateReceiver,mIntentFilter);

发送广播Intent并不会启动或者恢复Activity。就算是APP处于挂起状态(处于后台)也同样会接收到Intent。如果APP处于挂起状态的话,有任务完成需要通知到用户,那么可以使用Notification做到。绝不要启动Activity来响应接收到的Intent广播。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/478892.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

论文浅尝 - ACL2020 | 用于关系三元组抽取的级联二进制标记框架

论文笔记整理:王中昊,天津大学。来源:ACL2020链接:https://arxiv.org/pdf/1909.03227.pdf摘要从非结构化文本中提取关系三元组是构建大规模知识图的关键。然而,对于同一句子中的多个关系三元组共享同一个实体的重叠三元…

美团客户端响应式框架 EasyReact 开源啦

前言 EasyReact 是一款基于响应式编程范式的客户端开发框架,开发者可以使用此框架轻松地解决客户端的异步问题。 目前 EasyReact 已在美团和大众点评客户端的部分业务中实践,并且持续迭代了一年多的时间。近日,我们决定开源这个项目的 iOS Ob…

Python中实现模糊匹配的魔法库:FuzzyWuzzy

参考链接:https://mp.weixin.qq.com/s/5qzPb7HOCfRRGJICYUsAOQ FuzzyWuzzy一个简单易用的模糊字符串匹配工具包。让你轻松解决烦恼的匹配问题! 前言 在处理数据的过程中,难免会遇到下面类似的场景,自己手里头获得的是简化版的数…

LeetCode 897. 递增顺序查找树(中序遍历)

1. 题目 给定一个树,按中序遍历重新排列树,使树中最左边的结点现在是树的根,并且每个结点没有左子结点,只有一个右子结点。 示例 :输入:[5,3,6,2,4,null,8,1,null,null,null,7,9]5/ \3 6/ \ \2 4…

谈谈怎样提高炼丹手速

文 | 夕小瑶最近搞定几件焦头烂额的大事后,终于有了一丢丢的时间来写写文章,并且偶尔思考下算法工程师的核心竞争力是什么。前不久一时兴起写了篇标题党文章《惊了!掌握了这个炼丹技巧的我开始突飞猛进》,简单描述了一下我的升级打…

Android官方开发文档Training系列课程中文版:后台加载数据之使用CursorLoader进行查询

原文地址:http://android.xsoftlab.net/training/load-data-background/index.html 引言 在ContentProvider中查询数据是需要花点时间的。如果你直接在Activity进行查询,那么这可能会导致UI线程阻塞,并会引起”Application Not Responding”…

论文浅尝 | 神经协同推理

论文笔记整理:叶橄强,浙江大学计算机学院,知识图谱和知识推理方向。Paper link: https://arxiv.org/abs/2005.08129Github link: https://github.com/Scagin/NeuralLogicReasoning背景:推荐任务推荐作为一种认知智能任务&#xff…

在服务器上安装anaconda遇到的问题总结

1 安装anaconda需要一些安装包,需要提前备准备好,比如bunzip2, gcc编译等软件。 cd /anacondaRElyanacondaREly文件夹下放了anaconda所依赖的安装包,切换到该路径 rpm -Uvh *.rpm --nodeps --force安装好anaconda 需要的依赖环境…

LeetCode 693. 交替位二进制数(位运算)

1. 题目 给定一个正整数,检查他是否为交替位二进制数:换句话说,就是他的二进制数相邻的两个位数永不相等。 输入: 5 输出: True 解释: 5的二进制数是: 101输入: 7 输出: False 解释: 7的二进制数是: 111输入: 11 输出: False 解释: 11的二进…

全栈深度学习第6期: 模型测试和部署

一起追剧鸭简介Berkeley全栈深度学习追剧计划是由夕小瑶的卖萌屋发起的优质公开课打卡项目,通过微信群为同期追剧的小伙伴提供交流平台。关于该计划的详请见这里。Berkeley深度学习追剧群目前已有1000小伙伴加入,公众号后台回复口令 深度学习追剧 入群。…

Android官方开发文档Training系列课程中文版:后台加载数据之处理CursorLoader的查询结果

原文地址:http://android.xsoftlab.net/training/load-data-background/handle-results.html 就像上节课所说的,我们应该在onCreateLoader()内使用CursorLoader来加载数据。那么在数据加载完毕之后,加载结果会通过LoaderCallbacks.onLoadFin…

开源开放 | 欧若科技通过 OpenKG 开放 Nebula Graph 图数据库

开源工具名称:Nebula Graph贡献者:杭州欧若数网科技有限公司 Nebula GraphOpenKG 链接:http://openkg.cn/tool/nebula-graph-database 谣言盐水漱口能预防感染?钟南山院士团队公开辟谣:「盐水漱口有利于…

pkuseg-python的postag.zip在不能联网的服务器上的解决办法

关于pkuseg-python的基本介绍和使用: pkuseg.pkuseg( postag True)时,会触发download.py文件的下载命令,从github中下载,进而会导致服务器报错,如下 进而在pkuseg文件下打开download.py和__in…

数据库的方向 - 行vs列(转自: IBM i 中国开发团队)

转载地址:https://www.ibm.com/developerworks/community/blogs/IBMi/entry/database?langen 原文链接:http://ibmsystemsmag.blogs.com/you_and_i/db2/ 数据库的方向 - 行vs列 如果你是一位数据库专家的话,这篇博客可能帮不了你什么。 …

Android自动化页面测速在美团的实践

背景 随着移动互联网的快速发展,移动应用越来越注重用户体验。美团技术团队在开发过程中也非常注重提升移动应用的整体质量,其中很重要的一项内容就是页面的加载速度。如果发生冷启动时间过长、页面渲染时间过长、网络请求过慢等现象,就会直接…

NLP领域的首次Hard Label黑盒攻击!

文 | 阿毅编 | 小轶背景前段时间已经和大家分享了两篇关于NLP Privacy的文章。今天,我们又来给大家推送优质论文了(公众号学习法)。其实,NLP与其他方向的跨界结合这段时间层出不穷,且都发表到了非常好的顶会上。目前有…

论文浅尝 - ACL2020 | 利用知识库嵌入改进多跳 KGQA

论文笔记整理:吴畏,东南大学硕士研究生。来源: ACL 2020论文地址: https://www.aclweb.org/anthology/2020.acl-main.412.pdf开源代码: https://github.com/malllabiisc/EmbedKGQA动机在多跳KGQA中,系统需要对KG的多个边缘执行推理以推断出正…

Android官方开发文档Training系列课程中文版:管理设备的睡眠状态

原文地址:http://android.xsoftlab.net/training/scheduling/index.html 引言 当Android设备处于闲置状态时,它的屏幕首先会变暗,接着会关闭屏幕,最后会将CPU关闭。这些举措可以防止设备的电量迅速被耗尽。但是当APP需要的话&am…

解决pip安装报错:is not a supported wheel on this platform

解决pip安装报错:is not a supported wheel on this platform:https://blog.csdn.net/sty945/article/details/105200436/ 原因1 你下载安装的包不是当前平台所支持的 原因2 你下载的包,不符合你所在的平台的安装whl的名称规范,所…

MCI:移动持续集成在大众点评的实践

一、背景 美团是全球最大的互联网生活服务平台,为3.2亿活跃用户和500多万的优质商户提供一个连接线上与线下的电子商务服务。秉承“帮大家吃得更好,生活更好”的使命,我们的业务覆盖了超过200个品类和2800个城区县网络,在餐饮、外…