Activity和Service交互之bindService(回调更新UI)
一.回调接口
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)的更多相关文章
- Android四大组件应用系列——Activity与Service交互实现APK下载
Servic与Activity相比它没有界面,主要是在后台执行一些任务,Service有两种启动方法startService()和bindService(),startService方式Service ...
- Activity与Service进行数据交互
Android启动Service有两种方法,一种是startService,一种是bindService.生命周期如下: 执行startService时,调用者如果没有stopService,Serv ...
- Android Activity与Service的交互方式
参考: http://blog.csdn.net/gebitan505/article/details/18151203 实现更新下载进度的功能 1. 通过广播交互 Server端将目前的下载进度,通 ...
- Android学习总结(四)—— Activity和 Service进行通信
一.Activity 和 Service进行通信的基本概念 前面我们学习我生命周期里面包含了启动和停止服务的方法,虽然服务器在活动里启动,但在启动了服务之后,活动与服务基本就没有什么关系了.我们在活动 ...
- Service和广播联合更新UI的例子
sa111111 于 2010-11-19 10:56 发表在 [Android实例] [复制链接] [只看楼主] [上一主题] [下一主题] 在Android中,异步更新UI,通常我们会选用Ha ...
- Android——Activity and Service
参考博客:http://www.cnblogs.com/newcj/archive/2011/05/30/2061370.html http://www.cnblogs.com/feisky/ar ...
- 8.1.2 绑定Activity和Service
8.1.2 绑定Activity和Service 2010-06-21 16:57 李宁 中国水利水电出版社 字号:T | T <Android/OPhone开发完全讲义>第8章Andro ...
- 利用广播调用后台服务方法并根据方法返回的内容更新UI
一.UI布局代码 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns ...
- Activity与Service之间交互并播放歌曲的实现代码
Activity与Service之间交互并播放歌曲,为了方便,我把要播放的歌曲定死了,大家可以灵活改进 MService: 复制代码代码如下: package com.tiantian.test;im ...
随机推荐
- C++自带向量_vector_C++
vector 向量,是C++自带的一种容器,其实就是一个升级版的数组 因为它使用的是动态空间,所以当我们不确定数组空间的时候可以使用它 若要使用需打开头文件 #include<vector> ...
- 寻找已排序的连个数组的第k个元素
A,B是两个已经从小到大排序好了的数组,球这两个数组合并后的第k个元素. 很简单的想法,根据定义,把两个数组合并到一起,然后排序,然后就能得到了. 但是这样的复杂度是nlogn 还有就是用归并的思想, ...
- 函数atof,atoi,atol,strtod,strtol,strtoul 描述
函数atof,atoi,atol,strtod,strtol,strtoul atof(将字串转换成浮点型数) 相关函数 atoi,atol,strtod,strtol,strtoul表头文件 #in ...
- 包嗅探和包回放简介-tcpdump,tcpreplay
一. 嗅探 1.1 嗅探技术简介 1.1.1 目标 嗅探的目标:获取在网络上传输的各种有价值信息:账号.密码.非公开协议 1.1.2 原理 嗅探的原理:大多数嗅探都是在以太网内,利用数据链路层 ...
- 如何使用python下载网站上的视频
youtube-dl 从名字上也能看出来,是专门用来下载YouTube的视频. 不过本人对YouTube不感兴趣,但是这个模块可以用来下载bilibili上的视频我们就来试一试 首先pip insta ...
- linux下java.io.IOException: Cannot run program "/opt/jdk/jre/bin/java": error=13, Permission denied
linux下启动jetty时报: [root@mv01 jetty-distribution-9.2.14.v20151106]# java -jar start.jar java.io.IOExce ...
- PhpStorm 快捷键大全 PhpStorm 常用快捷键和配置+如何关闭快捷键ctrl+alt+方向键旋转屏幕
如果映射的是eclipse的快捷键,又同时安装了英特尔的GPU软件,那么会有这个快捷键冲突 就是快速复制快捷键:ctrl+alt+方向键 会调用英特尔旋转屏幕,禁用掉即可 PhPStorm 是 Je ...
- ELK获取用户真实IP
原理:在filebeat这台服务器上的nginx中获取到客户端真实IP($clientRealIp), 然后在访问日志中添加"$clientRealIp"字段.1. 通过ma ...
- [CF232E]Quick Tortoise
题目大意: 给你一个$n\times m(n,m\leq 500)$的格子,有一些是障碍物.从一个格子出发只能向下或向右走,有$q$组询问,每次询问从一个点是否能够到达另一个点. 思路: 分治. 两点 ...
- Java StringBuffer与StringBuider
String 的值是不可变的,每次对String的操作都会生成新的String对象,不仅效率低,而且耗费大量内存空间. StringBuffer类和String类一样,也用来表示字符串,但是Strin ...