android服务下载,android服务之bindService和unService中下载任务中的应用

通过bindService方法来调用服务final Down down = data;

viewHolder.videoActionBtn.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

if(bEditMode) {

// 处于编辑模式,点击删除

deleteDown(down);

} else {

// 处于播放模式,点击播放

VideoItemData video = (new Gson()).fromJson(down.getData(),

VideoItemData.class);

if(video != null) {

video.setMp4Url(down.getSavaPath());

VideoUtils.playVideo(context, video);

}

}

}

});

调用Service来删除Down。在ServiceConnection对象的onServiceConnected方法中,执行删除操作之后,调用unbindService方法来解绑定操作。

/**

* 删除下载的记录和内容。

*

* @param down

*/

private void deleteDown(final Down down){

Intent intent = new Intent(context, DownService.class);

ServiceConnection conn = new ServiceConnection() {

@Override

public void onServiceConnected(ComponentName name, IBinder service) {

((DownBinder)service).deleteDown(down, true);

context.unbindService(this);

}

@Override

public void onServiceDisconnected(ComponentName name) {

}

};

context.bindService(intent, conn, Context.BIND_AUTO_CREATE);

}

在Service类中定义Binder的子类。public class DownBinder extends Binder implements IDown {

@Override

public Down downVideo(VideoItemData video) {

if (!NetUtil.hasNetwork(context)) {

UIUtils.showToast(context, "网络不给力");

return null;

}

if (!SettingSharedPreference.getInstance().getCacheWith2G3G() && !NetUtil.hasWifiNetWork(context)) {

UIUtils.showToast(context, "已经禁止2G/3G网络下载视频");

return null;

}

synchronized (downList) {

for (Down down : downList) {

// 如果已经在下载列表中,直接返回down对象。

if (down.getUrl().equals(video.getMp4Url())) {

UIUtils.showToast(context, "已经在下载列表中");

return down;

}

}

}

// 如果是一个新的下载,发送消息开始一个新的下载。

Message.obtain(handler, DOWN_URL, video).sendToTarget();

return null;

}

@Override

public List getAllDown() {

return getDownList();

}

@Override

public void pauseDown(Down down) {

downHandler.removeMessages(START_DOWN);

down = getExistDown(down);

downHandler.sendMessage(downHandler.obtainMessage(PAUSE_DOWN, down));

}

@Override

public void startDown(Down down) {

downHandler.removeMessages(PAUSE_DOWN);

down = getExistDown(down);

downHandler.sendMessage(downHandler.obtainMessage(START_DOWN, down));

}

/**

* 取出对应的Down 从downList中取出的Down都赋值了DownTask

*

* @param down

* @return

*/

private Down getExistDown(Down down) {

for (Down d : downList) {

if (down.getUrl().equals(d.getUrl())) {

return d;

}

}

return down;

}

@Override

public void deleteDown(Down down, boolean deleteFile) {

downHandler.removeMessages(START_DOWN);

downHandler.removeMessages(PAUSE_DOWN);

down = getExistDown(down);

downHandler.obtainMessage(DELETE_DOWN, (deleteFile ? 1 : 0), 0, down).sendToTarget();

}

@Override

public void clearDown(boolean deleteFile) {

downHandler.removeMessages(START_DOWN);

downHandler.removeMessages(PAUSE_DOWN);

downHandler.obtainMessage(CLEAR_DOWN, deleteFile).sendToTarget();

}

@Override

public void reStartDown(Down down) {

down = getExistDown(down);

downHandler.obtainMessage(RESTART_DOWN, down).sendToTarget();

}

}

在onCreate方法中创建DownBinder实例。downBinder = new DownBinder();

在onBind方法中返回DownBinder实例。

@Override

public IBinder onBind(Intent intent) {

return downBinder;

}

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

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

相关文章

02CSS文本样式08

day08 CSS文本样式   font-family设置字体   font-size文字大小   font-size绝对单位|相对单位   cm mm pt pc xx-small   x-small medium large small xx-large x-large   相对单位:px em % larger smaller   color文字颜色   color:颜色|十六进制…

Illustrator、Indesign与Photoshop

Adobe illustrator是一种应用于出版、多媒体和在线图像的工业标准矢量插画的软件,作为一款非常好的图片处理工具,Adobe Illustrator广泛应用于印刷出版、海报书籍排版、专业插画、多媒体图像处理和互联网页面的制作等,也可以为线稿提供较高的…

判断sem信号量为零_将信号量递减为零的进程崩溃时,如何恢复信号量?

我有多个使用g 编译的应用程序,它们在Ubuntu中运行。我正在使用命名信号量来协调不同进程之间的关系。除非 出现以下情况, 否则所有方法都可以正常工作:如果其中一个进程调用sem_wait()或sem_timedwait()使信号量递减,然后在有机会…

在Spring中使用Future对象调用Async方法调用

下一个示例将演示Spring容器内部的异步方法调用。 为什么我们需要异步方法调用? 在某些情况下,我们并不真正知道是否需要重播或何时应返回结果。 传统方式在Java EE的异步处理世界中,使用队列/主题。 我们可以在Spring中进行相同的操作&#…

select里加链接

html select标签加链接的方法有很多&#xff0c;接下来为大家介绍下几个比较经典的&#xff0c;,感兴趣的朋友可以参考下哈&#xff0c;希望可以帮助到你 第一种 &#xff1a; <SCRIPT languagejavascript> <!-- // open the related site windows function mbar…

android ipc 多个客户端,Android IPC之AIDL进阶篇

前言在Android IPC之AIDL中我介绍了如何使用AIDL进行多进程通信&#xff0c;不过由于当时个人水平有限&#xff0c;仅仅介绍了最基础的部分&#xff0c;所以本篇博客主要是在Android IPC之AIDL的基础上深入介绍下AIDL的进阶的几点理解以及用法。AIDL接口中的in out inout的含义…

mysql数据库(3)-查询

数据库设计规范 58到家数据库30条军规解读查询 创建数据库、数据表 -- 创建数据库 create database python_test_1 charsetutf8; -- 使用数据库 use python_test_1; -- students表 create table students( id int unsigned primary key auto_increment not null, name varchar(…

Spring Data Solr教程:向所有存储库添加自定义方法

如果我们在现实生活中的软件项目中使用Spring Data Solr&#xff0c;很可能我们迟早会遇到一个要求&#xff0c;该要求指出我们的应用程序必须能够与本地Solr服务器和SolrCloud进行通信 。 目前&#xff0c;满足此要求意味着我们必须向所有Spring Data Solr存储库添加自定义方法…

远程管理口怎么看地址_红烧羊肉怎么样做才能滋味浓郁,咸甜适口,且回味有奶香?看这里...

原汁原味红烧羊肉此菜在制作上不同于其他红烧羊肉时要放入香料去膻&#xff0c;但在选料上很讲究&#xff0c;也就是说食材的好坏决定菜的好坏。选用一年生的崇明母山羊制作&#xff0c;膻味很小&#xff0c;肉质软嫩细腻&#xff0c;且带有一股淡淡奶香&#xff0c;因此不必放…

css段落文字(中英文混杂)实现两端对齐

案例如下&#xff1a; 混合使用汉字和英文的段落默认如下&#xff1a; 两边是不对齐的(一般情况下&#xff0c;我们对这种情况不做处理&#xff0c;除非需求或者设计非要我们实现两端对齐)。 对齐之后如下&#xff1a; 实现思路 一般的两端对齐是使用text-align:justify&…

44集合:蒜头军学英语

转载于:https://www.cnblogs.com/passion-sky/p/8424769.html

android病毒下载地址,LINE病毒查杀

LINE病毒查杀是免费通话、免费传讯「LINE」的周边应用程序之一。它能保护智能手机上个人信息的安全&#xff0c;使其免于病毒或恶意程序的侵害。您只要执行几个简单的步骤就能确认手机状态或完成病毒扫描。LINE病毒查杀界面LINE病毒查杀软件功能1、智能手机上的病毒将无所遁形!…

Golang系列:打印命令行参数

记得最早在学校机房学习 Java 时&#xff0c;照着书上的例子&#xff0c;写一个最简单 main 方法&#xff0c;当程序运行并在屏幕上打印出 hello world 时&#xff0c;内心竟有种莫名的激动&#xff0c;相信很多人都有这种经历吧。 不管学什么编程语言&#xff0c;都先从命令行…

Javascript 两种 function 定义的区别

大家都知道Javascript 有两个种定义Function的方法非常常用。例如 function a(){ alert ( "a" )} var a function (){ alert ( "a" )} 虽然两个种方式定义出来的 function 调用的时候结果一样&#xff0c;但是中间还是有区别的。举个简单的…

android app的签名,Android APP的签名

Android APP的签名Android项目以它的包名作为唯一的标识&#xff0c;如果在同一部手机上安装两个包名相同的APP&#xff0c;后者就会覆盖前面安装的应用。为了避免Android APP被随意覆盖&#xff0c;Android要求对APP进行签名。下面介绍对APP进行签名的步骤1、选择builder菜单下…

5.6.50 mysql 用什么驱动_日均5亿查询量的京东订单中心,为什么舍弃MySQL用ES?

京东到家订单中心系统业务中&#xff0c;无论是外部商家的订单生产&#xff0c;或是内部上下游系统的依赖&#xff0c;订单查询的调用量都非常大&#xff0c;造成了订单数据读多写少的情况。我们把订单数据存储在MySQL中&#xff0c;但显然只通过DB来支撑大量的查询是不可取的。…

java常用知识

1、transient 修饰的关键字不参与序列号转载于:https://www.cnblogs.com/ng1991/p/8425694.html

可搜索的文件? 是的你可以。 选择AsciiDoc的另一个原因

Elasticsearch是一个基于Apache Lucene的灵活&#xff0c;功能强大的开源&#xff0c;分布式实时云搜索和分析引擎&#xff0c;可提供全文搜索功能。 它是面向文档且无架构的。 Asciidoctor是一个纯Ruby处理器&#xff0c;用于将AsciiDoc源文件和字符串转换为HTML 5 &#xff…

如何判断两个时间段是否有交集

给定两个左闭右开时间段 [A, B)、[X, Y)&#xff0c;如何判断它们是否有交集&#xff1f; 由于时间可以转换为时间戳&#xff0c;时间戳是一个数字&#xff0c;所以我们可以将问题转换为&#xff1a;如何判断两个左闭右开的数字区间是否有交集。 结论是如果 X < B AND A <…

Jquery 获取table当前行内容

$("a[namecheckOriginal]").click(function () { var parent $(this).parent().parent().find("td"); var moduleEnum parent.eq(7).text(); if(moduleEnum""){ } alert(moduleEnmu);}); 转载于:https://www.cnblogs.com/austi…