一.回调接口

public interface OnProgressListener {
void onProgress(int progress);
}

二.Service代码

public class MyService extends Service {

    private int progress = ;
private OnProgressListener onProgressListener; class DownLoadBinder extends Binder{
public MyService getService(){
return MyService.this;
}
} // 设置回调接口
public void setOnProgressListener(OnProgressListener onProgressListener){
this.onProgressListener = onProgressListener;
} @Nullable
@Override
public IBinder onBind(Intent intent) {
return new DownLoadBinder();
} @Override
public void onCreate() {
super.onCreate();
} @Override
public int onStartCommand(Intent intent, int flags, int startId) {
return super.onStartCommand(intent, flags, startId);
} // 模拟下载
public void startDownload(){
new Thread(new Runnable() {
@Override
public void run() {
while (progress<){
progress += ;
// 通知调用方
if( onProgressListener != null ){
onProgressListener.onProgress(progress);
}
try {
Thread.sleep();
}catch (InterruptedException e){
e.printStackTrace();
}
}
}
}).start();
} // 获取progress
public int getProgress(){
return progress;
} @Override
public void onDestroy() {
super.onDestroy();
Log.e("Service", "onDestroy");
}
}

三.Activity关键代码:

public class MainActivity extends Activity {

    private ProgressBar progressBar;
private MyService myService;
private int progress = ; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); progressBar = (ProgressBar)findViewById(R.id.progressBar); Intent intent = new Intent(this, MyService.class);
// 标志位BIND_AUTO_CREATE是的服务中onCreate得到执行,onStartCommand不会执行
bindService(intent,conn, Context.BIND_AUTO_CREATE);
} protected void myClick(View v){
if( v.getId() == R.id.btn ){
myService.startDownload();
} if( v.getId() == R.id.btn2 ){
unbindService(conn);
}
} @Override
protected void onPause() {
super.onPause();
} @Override
protected void onStop() {
super.onStop();
} @Override
protected void onDestroy() {
unbindService(conn);
super.onDestroy();
} ServiceConnection conn = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
myService = ((MyService.DownLoadBinder)service).getService(); // 回调接口
myService.setOnProgressListener(new OnProgressListener() {
@Override
public void onProgress(int progress) {
progressBar.setProgress(progress);
}
});
} @Override
public void onServiceDisconnected(ComponentName name) { }
};
}

Activity和Service交互之bindService(回调更新UI)的更多相关文章

  1. Android四大组件应用系列——Activity与Service交互实现APK下载

    Servic与Activity相比它没有界面,主要是在后台执行一些任务,Service有两种启动方法startService()和bindService(),startService方式Service ...

  2. Activity与Service进行数据交互

    Android启动Service有两种方法,一种是startService,一种是bindService.生命周期如下: 执行startService时,调用者如果没有stopService,Serv ...

  3. Android Activity与Service的交互方式

    参考: http://blog.csdn.net/gebitan505/article/details/18151203 实现更新下载进度的功能 1. 通过广播交互 Server端将目前的下载进度,通 ...

  4. Android学习总结(四)—— Activity和 Service进行通信

    一.Activity 和 Service进行通信的基本概念 前面我们学习我生命周期里面包含了启动和停止服务的方法,虽然服务器在活动里启动,但在启动了服务之后,活动与服务基本就没有什么关系了.我们在活动 ...

  5. Service和广播联合更新UI的例子

    sa111111 于 2010-11-19 10:56 发表在 [Android实例] [复制链接] [只看楼主] [上一主题] [下一主题]   在Android中,异步更新UI,通常我们会选用Ha ...

  6. Android——Activity and Service

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

  7. 8.1.2 绑定Activity和Service

    8.1.2 绑定Activity和Service 2010-06-21 16:57 李宁 中国水利水电出版社 字号:T | T <Android/OPhone开发完全讲义>第8章Andro ...

  8. 利用广播调用后台服务方法并根据方法返回的内容更新UI

    一.UI布局代码 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns ...

  9. Activity与Service之间交互并播放歌曲的实现代码

    Activity与Service之间交互并播放歌曲,为了方便,我把要播放的歌曲定死了,大家可以灵活改进 MService: 复制代码代码如下: package com.tiantian.test;im ...

随机推荐

  1. .com和.cn域名的区别所在,各个域名后缀含义

    很多人在注册域名的时候不明白域名后缀的含义,在这里就介绍两种最为常用的域名,介绍下他们的区别以及适用的范围.需要先查询是否被注册,我们经常去的就是西部数据和万网,查询并注册未被注册的域名,一般无论是什 ...

  2. JS与jQuery中html-与-text方法的区别

    所有的实例均用下面的html <div id="id0"> <div id="id1"> 直接text <p> <sp ...

  3. 杭电oj2012-2021

    2012  素数判定 #include <stdio.h> #include <math.h> int main() { int x,y,i,j,a,flag; while(s ...

  4. MATLAB7 + sqlitejdbc-v056.jar 访问数据库

    以下代码出错: conn=database('data.db','','','org.sqlite.JDBC','jdbc:sqlite:C:/MATLAB7/work/del_man_voice_f ...

  5. UVA 104 Arbitrage

    动态规划类似FLOYD dp[i][j][k] 表示第i个点经过K次到达j点能获得的最大利润 #include <map> #include <set> #include &l ...

  6. hdu 5142(数学-进制转换)

    NPY and FFT Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  7. c++ set容器排序准则

    转载两篇博客: http://blog.csdn.net/lishuhuakai/article/details/51404214 http://blog.csdn.net/lihao21/artic ...

  8. AC日记——Valued Keys codeforces 801B

    801B - Valued Keys 思路: 水题... 来,上代码: #include <cstdio> #include <cstring> #include <io ...

  9. [BZOJ 2957]楼房重建(THU2013集训)(线段树维护单调栈)

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=2957 分析: 根据题意,就是比较斜率大小 只看一段区间的话,那么这段区间能看见的楼房数量就是这 ...

  10. 【bzoj3524】【Poi2014】【Couriers】可持久化线段树(主席树)水题

    [pixiv] https://www.pixiv.net/member_illust.php?mode=medium&illust_id=62485671 向大(hei)佬(e)势力学(di ...