android面试service,Android面试,与Service交互方式(4)

自定义接口交互

4何谓自定义接口呢,其实就是我们自己通过接口的实现来达到Activity与Service交互的目的,我们通过在Activity和Service之间架设一座桥樑,从而达到数据交互的目的,而这种实现方式和AIDL非常类似(后文会说到)。

4.1 实现原理

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

4.2 实现步骤

4.2.1 新建一个Interface,并在其中创建一个用于获取当前下载进度的的空方法getCurrentLoad()

publicinterfaceICountService {

publicintgetCurrentLoad();

}

4.2.2 新建Server端DownService实现ICountService并在其中通过一个内部类ServiceBinder继承自Binder并实现ICoutService接口。

publicclassDownLoadServiceextendsServiceimplementsICountService{

privateServiceBinder serviceBinder =newServiceBinder();

publicclassServiceBinderextendsBinderimplementsICountService{

@Override

publicintgetCurrentLoad() {

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

returni;

}

}

@Override

publicintgetCurrentLoad() {

return0;

}

}

在Server端中,实现获取下载进度的空方法getCurrentLoad();这是Eclipse自动生成的,重点不在这裡。我们需要在ServiceBinder类中覆写getCurrentLoad()方法,这裡我们返回当前的下载进度i。

4.2.3 Client端使用bindService()绑定Server端。

if(startSerBtn == v) {

Log.i(TAG, "Start Button Clicked.");

bindService(intent, serConn, BIND_AUTO_CREATE);

timer.schedule(newMyTimerTask(),1000, TIME *1000);//这里一定要延迟一下再开始获取数据,不然会报空指针异常

}

在Client端绑定Server端的同时,延迟1s开始获取下载进度。其中的intent = new Intent(“com.seven.test”);com.seven.test该字符串要与在AndroidManifest.xml中申明的一致

4.2.4 Server端返回binder对象。

@Override

publicIBinder onBind(Intent intent) {

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

returnserviceBinder;

}

这里的serviceBinder因为继承了Binder因此也是Binder对象。

4.2.5 Client端通过ServiceConnection来获取Server端的binder对象。

privateServiceConnection serConn =newServiceConnection() {

@Override

publicvoidonServiceDisconnected(ComponentName name) {

iCountService = null;

}

@Override

publicvoidonServiceConnected(ComponentName name, IBinder service) {

Log.i(TAG, "onServiceConnected()...");

iCountService = (ICountService)service;

}

};

获取的过程是在bindService()过程中完成的,这里的iCountService是接口ICountService的对象,在这里得到实例化。

4.2.6 在绑定完成之后,Server端会开启下载,在实际情况中Server端会开启独立线程用于下载,这里用i++来代替。

@Override

publicvoidonCreate() {

super.onCreate();

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

timer = newTimer();

timer.schedule(newMyTimerTask(),0, TIME*1000);

}

classMyTimerTaskextendsTimerTask{

@Override

publicvoidrun() {

if(100==i){

i=0;

}

i++;

}

}

bindService()方法执行之后会调用DownLoadService中的onCreate()方法,在其onCreate()方法中开启timer使得i++。

4.2.7 Server端已经开启了下载,那么Client端需要及时获取下载进度并在主界面上更新。

Handler mHandler =newHandler(){

@Override

publicvoidhandleMessage(Message msg) {

super.handleMessage(msg);

Log.i(TAG, "handleMessage...");

intcurLoad = iCountService.getCurrentLoad();

mProgressBar.setProgress(curLoad);

currentTv.setText(curLoad+"%");

}

};

classMyTimerTaskextendsTimerTask{

@Override

publicvoidrun() {

mHandler.sendMessage(mHandler.obtainMessage());

}

}

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

4.3 小结

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

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

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

相关文章

Python input 函数 -Python零基础入门教程

目录 一.前言二.Python input 函数简介三.Python input 函数实战四.猜你喜欢 零基础 Python 学习路线推荐 : Python 学习目录 >> Python 基础入门 一.前言 Python 内置函数其实挺多的,其中 input 和 eval 算得上比较特殊,input 属于交互式内置函数…

Metasploit基础和基本命令详解

Metasploit基础 2003年H.D Moore创建了Metasploit,从那之后Metasploit便快速发展起来,如今被公认为最为流行的渗透测试工具之一。Metasploit是一个完全的Ruby驱动项目,提供了大量的漏洞渗透、攻击载荷(payload)、编码…

综评:5个方面看刚刚发布的Kubernetes 1.12

Kubernetes项目在过去几年中发展迅速,并且作为容器编排和管理解决方案的领导者而备受尊重。有了这个地位,Kubernetes开发者有责任提供经过充分测试,易于维护,高性能和可扩展的API和工具。在即将到来的每个发布周期中,大…

华为麒麟1020鸿蒙系统,华为P50pro最新确认:麒麟1020+立体全面屏+鸿蒙系统,这才是华为...

原标题:华为P50pro最新确认:麒麟1020立体全面屏鸿蒙系统,这才是华为华为P系列一直是领导华为手机上半年的发展,而今年的华为P40系列更是实现了大爆发,市场上手机销量不断的攀升,并且权威的科技评测也给出了…

Python eval 函数 -Python零基础入门教程

目录 一.前言二.Python eval 函数简介三.Python eval 函数实战四.猜你喜欢 零基础 Python 学习路线推荐 : Python 学习目录 >> Python 基础入门 一.前言 Python 内置函数其实挺多的,其中 input 和 eval 算得上比较特殊,input 属于交互式内置函数&…

Ruby-Metasploit的核心

Ruby-Metasploit的核心 Ruby编程语言可以说是Metasploit框架的核心。 根据Ruby官方网站介绍,Ruby编程语言简单而又强大,面向对象,为解释性语言,执行速度快,项目开发周期短,可以构建自动化类来重用代码是R…

干货 | 算法和编程面试题精选TOP50!(附代码+解题思路+答案)

作者 | javinpaul编译 | 王天宇、Jane整理 | Jane【导读】之前我们给同学们推荐了很多关于 Python 的面试资源,大家都表示很有用。这次营长表示要翻 Java 的牌子啦~ 应大家的强烈反馈,我们找了一套 Java 语言的算法和编程的面试题。这份面试资源主要包含…

Xml转换成html表格代码,如何用C++代码将XML文件转换为HTML表格?

我有一个XML文件。我想把它转换成HTML文件,并用我的C应用程序像HTML表一样表示它。有没有任何C库可以用来解析XML文件并创建HTML文件?示例:Belgian Waffles$5.95Two of our famous Belgian Waffles with plenty of real maple syrup650Strawberry Belgia…

Python map 函数 -Python零基础入门教程

目录 一.前言二.Python map 函数语法简介三.Python map 函数实战 1.使用 map 函数2.map 函数配合 lambda 匿名函数一起使用 四.Python map 函数效率对比五.Python map 函数总结六.猜你喜欢 零基础 Python 学习路线推荐 : Python 学习目录 >> Python 基础入门 一.前言 截…

鸿蒙os2.0开发者beta版,鸿蒙 OS 2.0 开发者beta版针对Mate 40系列设备开放

华为开始针对包括P40,Mate 30和MatePad Pro设备在内的设备招募HarmonyOS 2.0 Mobile开发人员beta版。招募之后,华为还开始向选定的测试人员推出HarmonyOS 2.0移动开发人员更新。根据最新信息,华为现已决定扩展适用于华为Mate X2可折叠手机&am…

python2版本libnum

如果运行RsaCtfTool工具 需要用到libnum,而网上基本上都是python3的libnum讲解,下面我就来说说python2的libnum https://github.com/ryanInf/python2-libnum 这个链接讲述的是python2的libnum模块 安装 git clone https://github.com/ryanInf/python2-l…

1.7亿条数据,比胡同和撸串更真实的北京

作者王越来源DT财经原创作品,如有转载,请联系公众号授权。“宇宙中心”是哪里?哪里又是北京的城市活力中心?北京究竟是一座怎样的城市?是汇聚了政治中心、国际交往中心、科技创新中心等多项顶级职能的大国之都,是拥有…

Python 文件读写操作-Python零基础入门教程

目录 一.Python 文件的打开 open二.Python 文件的关闭 close三.Python 文件的读取 read 1.read 函数2.readline 函数3.readlines 函数 四.Python 文件的写入 write 1.write 函数语法2.write 函数使用案例 五.Python 文件偏移 seek 1.seek 函数2.tell 函数3.seek / tell 函数示…

html box 竖线,CSS3 小竖条脉冲型LOADING动效

CSS语言:CSSSCSS确定.loader-wrap {position: absolute;left: 0;right: 0;top: 0;bottom: 0;margin: auto;background-color: #ff9328;}.loader {position: absolute;left: 0;right: 0;top: 0;bottom: 0;margin: auto;height: 40px;width: 80px;box-sizing: border-…

面趣 | 为什么要分稳定排序和非稳定排序?

作者channingbreeze如需转载,请联系原作者。小史是一个应届生,虽然学的是电子专业,但是自己业余时间看了很多互联网与编程方面的书,一心想进BAT互联网公司。今天他去了一家互联网小巨头公司面试了。没想到面试并不像想象中的顺利。…

个人求职简历计算机应用技术学院信息门户,计算机应用技术专业求职简历范文...

计算机应用技术专业求职简历范文应届毕业生求职网为毕业生推荐的是计算机方面的简历范文,欢迎阅读浏览:姓名:yjbys 性别:出生年月: 民族:户口所在地: 现居住地:婚姻状况:…

云漫圈 | AR VR傻傻分不清楚。。。

原文出自【烹茶十一】对此,你是不是也有好多吐槽的,来聊聊呀~~推荐阅读这届程序员,要做好苦日子的准备了?我跟OpenStack 1-8年,从ABC到HI、到KO完01微 信 群 添加小编微信:tangguoyemeng,备注“…

Python 异常处理-Python零基础入门教程

目录 一.Python 异常处理简介二.Python 异常捕获方式 1.捕获所有异常2.捕获指定异常3.捕获多个异常4.万能的异常捕获5.异常中的 else6.异常中的 finally7.raise 主动触发异常 三.猜你喜欢 零基础 Python 学习路线推荐 : Python 学习目录 >> Python 基础入门 在 Python 开…

CTF基本赛制与题型

CTF简介 CTF的全称为Capture The Flag,即夺旗赛。CTF竞赛活动蓬勃发展,已成为了锻炼信息安全技术,展现安全能力和水平的绝佳平台。 CTF号称计算机界的奥林匹克。 CTF目标: CTF参赛队伍的目标为获取尽可能多的flag。参赛队伍需要通过解决信息…

正确使用计算机网络,如何正确使用计算机网络

计算机网络的使用,说简单一点,进行网络世界,大家都会使的,那么可能性的存在哪些问题呢?下面是小编跟大家分享的是,欢迎大家来阅读学习~工具/原料计算机网络方法/步骤计算机网络有几大特点,第一自然也是内容…