android service交互,Android Activity与Service的交互方式

参考: http://blog.csdn.net/gebitan505/article/details/18151203

实现更新下载进度的功能

9924acf280a49c45a4a4c3888a799b23.gif

1. 通过广播交互

Server端将目前的下载进度,通过广播的方式发送出来,Client端注册此广播的监听器,当获取到该广播后,将广播中当前的下载进度解析出来并更新到界面上。

优缺点分析:

通过广播的方式实现Activity与Service的交互操作简单且容易实现,可以胜任简单级的应用。但缺点也十分明显,发送广播受到系统制约。系统会优先发送系统级广播,在某些特定的情况下,我们自定义的广播可能会延迟。同时在广播接收器中不能处理长耗时操作,否则系统会出现ANR即应用程序无响应

2. 共享文件交互

这里提到的共享文件指的是Activity和Service使用同一个文件来达到传递数据的目的。我们使用SharedPreferences来实现共享,当然也可以使用其它IO方法实现,通过这种方式实现交互时需要注意,对于文件的读写的时候,同一时间只能一方读一方写,不能两方同时写

优缺点分析:

对於这种方式实现Activity与Service的交互,可以说很方便,就像使用管道,一个往裡写,一个往外读。但这种方式也有缺陷,写入数据较为复杂以及数据量较大时,就有可能导致写入与读数据出不一致的错误。同时因为经过了一个中转站,这种操作将更耗时。

3. Messenger交互(信使交互) Handler

Messenger翻译过来指的是信使,它引用了一个Handler对象,别人能够向它发送消息(使用mMessenger.send(Message msg)方法)。该类允许跨进程间基于Message通信,在服务端使用Handler创建一个 Messenger,客户端只要获得这个服务端的Messenger对象就可以与服务端通信了。也就是说我们可以把Messenger当做Client端与Server端的传话筒,这样就可以沟通交流了

优缺点分析:

通过Messenger来实现Activity和Service的交互,稍微深入一点我们就可以知道,其实Messenger也是通过AIDL来实现的。对於前两种实现方式,Messenger方式总体上来讲也是比较容易理解的,这就和平时使用Handler和Thread通信一个道理。

4. Server中自定义接口交互

自定义一个接口,该接口中有一个获取当前下载进度的空方法。Server端用一个类继承自Binder并实现该接口,覆写了其中获取当前下载进度的方法。Client端通过ServiceConnection获取到该类的对象,从而能够使用该获取当前下载进度的方法,最终实现实时交互。

public interface ICountService {

public int getCurrentLoad();

}

public class DownLoadService extends Service implements ICountService{

private ServiceBinder serviceBinder = new ServiceBinder();

public class ServiceBinder extends Binder implements ICountService{

@Override

public int getCurrentLoad() {

Log.i(TAG, "ServiceBinder getCurrentLoad()... i=:"+i);

return i;

}

}

@Override

public int getCurrentLoad() {

return 0;

}

}

@Override

public IBinder onBind(Intent intent) {

Log.i(TAG, "DownLoadService.onBind()...");

return serviceBinder;

}

Client端的Timer在bindService()完成之后1秒再开始获取下载进度,获取方法是直接通过int curLoad = iCountService.getCurrentLoad();这里的getCurrentLoad()方法是DownLoadService内部类ServiceBinder中的方法。Client端将获取到的下载进度更新到介面上并更新进度条。

优缺点分析:

这种方法简单实用,扩展性强,但其也有一些缺点,比如需要延迟一些再开始获取Server端的数据,从而无法完全实现从零开始同步更新。综其所述,通过自定义接口实现Activity与Service交互的方法还是比较实用的。适用於同进程中通信,不能进行跨进程通信。

5. AIDL交互

原理: AIDL属于Android的IPC机制,常用于跨进程通信,主要实现原理基于底层Binder机制。

优缺点分析:

AIDL在Android中是进程间通信常用的方式,可能使用较為复杂,但效率高,扩展性好。同时很多系统服务就是以这种方式完成与应用程序通信的。

Android Activity、Service、BroadcastReceiver 的生命周期

Activity.Service.BroadcastReceiver这三个组建是Android开发中最常使用到的组件,在它们的生命周期的各个阶段我们需要针对性的做些事情,了解这些组件的生命周期有利于我 ...

Android——Activity and Service

参考博客:http://www.cnblogs.com/newcj/archive/2011/05/30/2061370.html   http://www.cnblogs.com/feisky/ar ...

Android activity和service的生命周期对比

1Activity生命周期 七个方法 1. void onCreate(Bundle savedInstanceState) 当Activity被第首次加载时执行.我们新启动一个程序的时候其主窗体的o ...

android Activity绑定Service

activity可以绑定Service,并且可以调用Service中定义的方法 Service代码:在里面多了一个IBinder;个人理解是用来与Activity绑定的主要通道: public cla ...

Android开机启动Activity或者Service方法

本文出自 “Bill_Hoo专栏” 博客,请务必保留此出处http://billhoo.blog.51cto.com/2337751/761230 这段时间在做Android的基础开发,现在有一需求是 ...

Android Activity/Service/Broadcaster三大组件之间互相调用

我们研究两个问题,1.Service如何通过Broadcaster更改activity的一个TextView.(研究这个问题,考虑到Service从服务器端获得消息之后,将msg返回给activity ...

Android中Activity、Service和线程之间的通信

Activity.Service和线程应该是Android编程中最常见的几种类了,几乎大多数应用程序都会涉及到这几个类的编程,自然而然的,也就会涉及到三者之间的相互通信,本文就试图简单地介绍一下这三者 ...

Android 跨应用调用Activity及Service

如何调用另外一个app应用的activity或者service,本文提供一个验证可行的方法. 调用方法: Intent intent=new Intent("youActionName&qu ...

Android开机启动Activity或者Service方法(转载)

这段时间在做Android的基础开发,现在有一需求是开机启动,按照网上某些博文教程做了下,始终不成功,一开机总是提示所启动的应用程序意外终止,于是参考了Android SDK doc,终于解决问题,下 ...

随机推荐

ORACLE "ORA--22992:无法使用远程表选择的LOB定位器,database link"

解决办法:    先创建一个临时表,然后把远程的含CLOB字段的表导入到临时表中,再倒入本表. create global temporary table demo_temp as select * ...

spring4+hibernate4+maven环境搭建

本文主要介绍利用maven搭建spring4+hibernate4开发环境. 首先我们创建一个maven项目,具体步骤就不详细介绍了,看看我们pom.xml文件

java集合-集合大家族

在编写 Java 程序中,我们最常用的除了八种基本数据类型,String 对象外还有一个集合类,在我们的的程序中到处充斥着集合类的身影!Java 中集合大家族的成员实在是太丰富了,有常用的 Array ...

浅谈 Linux 内核无线子系统

浅谈 Linux 内核无线子系统 本文目录 1. 全局概览 2. 模块间接口 3. 数据路径与管理路径 4. 数据包是如何被发送? 5. 谈谈管理路径 6. 数据包又是如何被接收? 7. 总结一下 L ...

context:component-scan扫描使用的use-default-filters

如下方式可以成功扫描到@Controller注解的Bean,不会扫描@Service/@Repository的Bean.

学习Berkeley DB- 入门

1 导言 首先,我们要了解Berkeley DB的一些基本特性,在IBM的开发网站上有篇文章对其有比较清晰的介绍: 这篇文章讲到了BDB的设计思想和核心数据结构.以及数据访问算法:并有常用函数使用范例 ...

windows提权操作以及系统开机关机重启代码(用到了LookupPrivilegeValue和AdjustTokenPrivileges调整进程的Token权限)

对于UAC提权操作,一般在编译期间,如果程序有需求要提权,会在编译器里设置,vs2010比较简单,在工程属性里可以直接设置,vs2005稍微有点儿麻烦,参考这篇文章: http://www.seany ...

用Iconv应对NodeJs对称加密技术在汉字编码与NoSQL的一些坑洞

·起因 汉字编码技术在实际应用中总是会存在这样或者那样的问题,尤其是在一些热门NoSQL方面多少会遇到挑战.比方说Cassandra字符集还不直接支持GB2312,要想存储写汉字那可真是麻烦.当然这还 ...

Extjs--12种布局方式

按照Extjs的4.1的文档来看,extjs的布局方式大致有12种,下面一一介绍,有些代码就是文档中的. 1.Border 边界布局 border布局,最多可以将页面分割为"东南西北中&qu ...

vue.js2.0:如何搭建开发环境及构建项目

1,安装node.js Node.js官网:https://nodejs.org/en/ 进入Node.js官网,选择下载并安装Node.js.安装过程只需要点击“下一步”即可, 如下图,非常简单. ...

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

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

相关文章

[转帖]AjaxControlToolkit.TabContainer 自定义样式续

Tabs控件其实是一个容器控件TabContainer和面板控件TabPanel。TabContainer控件用于包含TabPanel。TabPanel控件用于显示。下面来看一个示例:1)在VS2005中新建一个ASP.NET AJAX-Enabled Web Project项目工程,命名为Tabs。2)在Default.aspx页面上添加一个…

c++ using 前置声明_每日优鲜前置仓模式的配货优化方案案例介绍

大渔导读:2019 年零售业供应链最佳实践大奖——银奖 基于每日优鲜前置仓模式的配货优化方案案例;1. 背景介绍: 每日优鲜成立于 2014 年 11 月,是专注于优质生鲜的移动电商,已在北上广深等全国 10 个核心城市建立“城市…

lg gw880 qq2011 android beta4版,LG GW880评测:CMMB天线、细节设计

机身侧面的银色边框与黑色的正面形成了鲜明的对比。不同于大部分的手机,LG GW880把电源/锁机键放到了机身左侧,而且还多了一个返回键,所以机身侧面设置了比较多的按键,设计比较复杂。机身右侧是拍照键、音量键以及数据线接口&…

excel按季度分类汇总_Excel数据分析实战(1)--电商销售记录分析

Excel是市面上最流行的办公软件之一,也是数据分析师入门最好的学习工具。因为其功能强大、操作简单,可以快速对数据进行清洗,建模,可视化,操作者不需要其他计算机基础也能快速上手。所以选择Excel进行数据分析入门的项…

[Silverlight]奇技银巧系列-2

Silverlight奇技银巧系列: 所有该系列中的文章只为介绍一些Silverlight中或隐藏在Silverlight .NET framework鲜为人知的知识和技巧。这些文章并非教程,也是不是什么技术指导,您只需对文章介绍的内容保有印象。这些知识和技巧也许会在不经意间…

好程序员Java分享Java案例_英汉字典

在写代码的时候,当鼠标悬浮在某一个单词上面的时候,有道词典点有时会弹出一个消息气泡,在里面中给出关于这个单词相关的解释,下面给大家展示一个使用Java基础语言编写的英汉字典案例:   实现功能: …

同事更新几个表_最近计划学习的几个网站资源

在没有明确需要的时候逛知乎,B站什么的随便看教程,发现资源很多,五花八门,但是总也没系统地学习一下。一会儿看一小段,转眼就忘光了,只留下一个刚才我没有在玩耍的错觉。以上是无关紧要的忏悔。接下来主要记…

带有托管代码的InfoPath2007表单模版发布到SharePoint表单库(浏览器方式查看)

在本篇文章中,将与大家分享如何将一个带有托管代码(manage code)的InfoPath2007表单模版发布到SharePoint Server2007的表单库中,并使得最终用户可以通过浏览器方式访问。 1. 创建InfoPath表单模版 在这里,我们使用VSTO2005与InfoPath2007。生成…

cefsharp System.IO.FileNotFoundException: 未能加载文件或程序集“CefSharp.Core.dll”或它的某一个依赖项。...

解决办法 安装vc 2015 Redistributable 64位系统安装x64 如果还报错先装x64版本再装x86版本 https://files.cnblogs.com/files/xuejianxiyang/vc_redist.part1.rarhttps://files.cnblogs.com/files/xuejianxiyang/vc_redist.part2.rarhttps://files.cnblogs.com/files/xuejianx…

7种常用p2p共享协议

一、Napster:第一个大型的;中央集中式;倒闭了;二、Gnutella和Gnutella2:开源的;第一个真正非中心的。Gnutella2是对Gnutella的改进和扩展。三、FastTrack:第一个客户端是KazaA。协议与Gnutella类…

c++中怎么数组内有用元素的个数_前端面试(算法篇) - 数组乱序

一、面试题问:有一个长度为 100 的数组,如何从中随机挑选 50 个元素,组成一个新的数组?答:这个...那个...emmmmmm问:那先不挑 50 个,就挑一个数,知道怎么做吗?答&#xf…

axios+Vant+vue+jq重构jq月经周期计算器源代码(兼容移动端)

我是歌谣 代码重构不易 公众号关注小歌谣 前言 网络上流行了一款jq生成月经计算器的代码 是这样的 实现效果如图所示 本次讲解就是说明如何用VantjqVue实现此代码的重构 先看一眼重构演示的效果 这个是可以直接进行接口调用的 首先我们看一眼目录结构 我们这边贴出我自己手…

html页面高度设为自动,html – CSS:响应式布局中的高度自动问题

没有固定的正确高度.如果我在css中设置固定高度,则在响应式布局中,图像将不会以正确的宽高比调整大小.主要问题是css根据src-attribute设置的图像计算自动高度和宽高比,而不是width-和height-attribute.因此,如果有一个有宽度和高度的真实图像,一切正常.但是如果有一个空白(这只…

MVC Controller与ActionResult的返回值

Action的要求• 必须是一个公有方法• 必须返回ActionResult类型• 必须是实例方法• 不能是范型方法• 没有标注NonActionAttribute• 不能被重载(overload) Controller 提供了众多的方法让我们返回各种类型的 ActionResult。 1. View最常用的一种&…

事务处理

第13章 事务处理 事务处理是包含一个或多个任务的一组关联操作的提交或回滚操作。在事务执行的过程中,保证事务具有基本的ACID属性(原子、一致性、隔离和持久性)。.NET Framework的事务管理支持多种事务处理方式,包括显性事务和隐…

为多孔介质的当量直径_多孔介质流建模简介

拥有一款先进的多孔介质建模工具,是许多行业的刚性需求。COMSOL Multiphysics 软件 5.5 版本新增的附加产品——多孔介质流模块,可以满足众多行业的需求。使用该模块可以定量研究多孔介质中的质量、动量和能量传递。该模块适用于燃料电池、纸浆和纸张干燥…

北航计算机网络 传输层实验,北航研究生计算机网络实验_实验七 传输层实验

** 这个实验我没有约到没有问题的机子(连续三台机子都是坏的...)因此仅供参考1、根据2.6中步骤3回答:TCP的连接和建立采用的是:三次握手方式,PCA是主动打开方(C),PCB是被动打开方(S)。先点击发送再点击接收,会出现什么…

python 竖线 绘图_Python可视化 | Seaborn5分钟入门(二)——barplot countplot

Seaborn是基于matplotlib的Python可视化库。 它提供了一个高级界面来绘制有吸引力的统计图形。Seaborn其实是在matplotlib的基础上进行了更高级的API封装,从而使得作图更加容易,不需要经过大量的调整就能使你的图变得精致。注:所有代码均在IP…

计算机网络工程综合布线目的,弱电工程综合布线系统与计算机网络布线系统有何不同?【网络综合布线】...

弱电工程的综合布线是模块化和灵活的建筑物或建筑物之间的信息传输通道。 综合配电系统可以连接到声音设备、数据设备、开关设备和各种控制设备和信息管理系统。 同时,它还使这些设备与外部通信网络连接起来。弱电工程综合布线系统与计算机网络布线系统有何不同..弱…

计算机专硕专业课单科分数线,计算机考研|这两所自划线,单科没过线也能复试?...

原标题:计算机考研|这两所自划线,单科没过线也能复试?东南、浙大!单科没过线也能复试!关注量子考研公众号,获取最新计算机考研咨询1.东南大学:统考考生(不含报考苏州联合研究生院考生和管理类联…