在service开启线程,利用接口更新进度

public class MainActivity extends AppCompatActivity {

    MyBindService msgService;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ImageView imageView = (ImageView) findViewById(R.id.image); /** 进入Activity开始服务 */
Intent intent = new Intent(MainActivity.this, MyBindService.class);
bindService(intent, conn, Context.BIND_AUTO_CREATE);
} ServiceConnection conn = new ServiceConnection() {
@Override
public void onServiceDisconnected(ComponentName name) { } @Override
public void onServiceConnected(ComponentName name, IBinder service) {
Log.w("输出:", "onServiceConnected---------");
//返回一个MsgService对象
msgService = ((MyBindService.MsgBinder) service).getService();
// 绑定成功后获取到服務开始下载 msgService.startDownLoad();
//注册回调接口来接收下载进度的变化
msgService.setOnProgressListener(new MyBindService.OnProgressListener() {
@Override
public void onProgress(int progress) {
Log.w("输出:", "progress---------" + progress);
Log.w("输出:", "---thread----" + Thread.currentThread().getName()); }
}); }
}; protected void onDestroy() {
super.onDestroy();
this.unbindService(conn);
Log.v("MainStadyServics", "out");
} }

绑定service回调接口

public class MyBindService extends Service {
/**
* 进度条的最大值
*/
public static final int MAX_PROGRESS = 100;
/**
* 进度条的进度值
*/
private int progress = 0; /**
* 更新进度的回调接口
*/
private OnProgressListener onProgressListener; public interface OnProgressListener {
void onProgress(int progress);
} /**
* 注册回调接口的方法,供外部调用
*
* @param onProgressListener
*/
public void setOnProgressListener(OnProgressListener onProgressListener) {
this.onProgressListener = onProgressListener;
} /**
* 增加get()方法,供Activity调用
*
* @return 下载进度
*/
public int getProgress() {
return progress;
} /**
* 模拟下载任务,每秒钟更新一次
*/
public void startDownLoad() {
new Thread(new Runnable() {
@Override
public void run() {
while (progress < MAX_PROGRESS) {
progress += 5;
//进度发生变化通知调用方,需要和切换到主线程
if (onProgressListener != null) {
Log.w("输出:", "---thread"+Thread.currentThread().getName());
onProgressListener.onProgress(progress);
} try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
} }
}
}).start();
} /**
* 返回一个Binder对象
*/
@Override
public IBinder onBind(Intent intent) {
Log.w("TAG", "---onBind");
return new MsgBinder();
} //此方法是为了可以在Acitity中获得服务的实例
public class MsgBinder extends Binder {
/**
* 获取当前Service的实例
*
* @return
*/
public MyBindService getService() {
return MyBindService.this;
}
} @Override
public void onCreate() {
super.onCreate();
Log.w("TAG", "---onCreate");
} @Override
public void onDestroy() {
super.onDestroy();
/** 服务停止时 */
Log.w("TAG", "---onDestroy"); } @Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.w("TAG", "---onStartCommand");
return super.onStartCommand(intent, flags, startId);
} }

不要忘了注册服务

service下载任务的更多相关文章

  1. rest service下载文件与上传

    文件下载: @GET @Path("/fileGet") @Consumes({ MediaType.APPLICATION_XML, MediaType.APPLICATION_ ...

  2. 转--2014年最新810多套android源码2.46GB免费一次性打包下载

    转载自:http://www.eoeandroid.com/thread-497046-1-1.html 感谢该博客主人无私奉献~~ 下面的源码是从今年3月份开始不断整理源码区和其他网站上的安卓例子源 ...

  3. Service通信详解

    1.使用Intent进行异步通讯 在Service任务一旦完成后,就发送广播.开发者只需要实现一个BroadcastReceiver来监听响应既可. Activity.startService启动in ...

  4. 2014年最新720多套Android源码2.0GB免费一次性打包下载

    之前发过一个帖子,但是那个帖子有点问题我就重新发一个吧,下面的源码是我从今年3月份开始不断整理源码区和其他网站上的android源码,目前总共有720套左右,根据实现的功能被我分成了100多个类,总共 ...

  5. Android开发全套视频教程在线观看网盘下载

    千锋金牌讲师老罗老师简介: 国内第一批Android教学讲师,10多年软件开发经验,6年多教学经验,曾担任广东电信北京分公司移动事业部项目经理,主持过微软中国平台考试系统.山西省旅游局智能化平台等大型 ...

  6. 在客户端浏览器中点击下载生成excel

    生成excel的样式,里面的数据已经写好,使用apache,poi来写的. 1.首先是controller /** *下载服务结构体Excel * *@return */ @RequestMappin ...

  7. webservice文件上传下载

    使用DataHandler实现webservice的文件上传下载 服务端代码: package com.hello.weChat.controller; import javax.activation ...

  8. 在 Azure 上使用 Docker运行 Mono

    Docker 是最近相当热门的一个名词,它是一个基于 Linux Container 的轻量化的虚拟技术,而微软也相当积极与 Docker 合作,在 Azure 上支持这个火热的技术,并且提供简单的方 ...

  9. ASP.NET(转自wiki)

    ASP.NET是由微软在.NET Framework框架中所提供,开发Web应用程序的类库,封装在System.Web.dll文件中,显露出System.Web名字空间,并提供ASP.NET网页处理. ...

随机推荐

  1. 【运维】Vmware虚拟机静态IP的设置

    这几天学习大数据,搭建的集群服务器由于Vmware内部实现的虚拟网关,动态分配ip,使得每次ip更改后,均需要修改集群节点的每个hosts文件,不然集群间联系会出错,因此为了杜绝这个问题,这里修改集群 ...

  2. MongoDB入门(介绍、安装、增删改查)

    文章作者公众号bigsai,已收录在回车课堂,如有帮助还请不吝啬点个赞赞支持一下! 课程导学 大家好我是bigsai,我们都学过数据库,但你可能更熟悉关系(型)数据库例如MySQL,SQL SERVE ...

  3. IoC基础篇(一)--- Spring容器中Bean的生命周期

    日出日落,春去秋来,花随流水,北雁南飞,世间万物皆有生死轮回.从调用XML中的Bean配置信息,到应用到具体实例中,再到销毁,Bean也有属于它的生命周期. 人类大脑对图像的认知能力永远高于文字,因此 ...

  4. spring Boot面试题(2020最新版)

    概述 什么是 Spring Boot? Spring Boot 是 Spring 开源组织下的子项目,是 Spring 组件一站式解决方案,主要是简化了使用 Spring 的难度,简省了繁重的配置,提 ...

  5. day59:Linux:编辑工具vim&文件类型&文件属性

    目录 1.Linux编辑工具vim 2.Linux文件类型 3.Linux文件属性 4.今日份Linux练习题 Linux编辑工具vim 1.什么是vim 文本文件的编辑工具,  和windows的n ...

  6. Python-如何在一个for循环中迭代多个可迭代对象?

    案例: 某班学生期末考试成绩,语文.数学.英语分别存储在3个列表中,同时迭代三个列表.,计算每个学生的总分(并行) 某年级有4个班,某次英语成绩分别记录在4个列表中,依次迭代每个列表,统计全年级高于9 ...

  7. EM 算法 Expectation Maximization

  8. 使用SSM框架实现图片的上传

    SSM实现图片上传功能 效果 在前端页面点击上传图片功能按钮,即弹出文件管理器,选择图片并上传: 思路 在前端页面添加 input 标签,type选择file. 在后端controller编写方法. ...

  9. DMZ是什么

    刚刚接触安全域,实在是佩服自己真的是菜,,,啥都不懂,看看过段时间能有多大进步吧... 概念 DMZ:它是一个缓冲区,一个隔离区.它是位于两台防火墙之间的区域,相对于INTER网来说安全级别高一些,但 ...

  10. C++ | 继承(基类,父类,超类),(派生类,子类)

    转载:https://blog.csdn.net/Sherlock_Homles/article/details/82927515 文章参考:https://blog.csdn.net/war1111 ...