Activity和Service交互之bindService(回调更新UI)
2024-09-04 18:16:27
一.回调接口
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) { }
};
}
最新文章
- .NET Core RC2/RTM 明确了时间表
- SQL周、日、月、年数据统计
- python基础整理笔记(九)
- 20145223《Java程序程序设计》第9周学习总结
- matlab 相关性分析
- 分布式系列七: zookeeper简单用法
- 系统管理--配置Gitlab
- 傻瓜学编程之block_1
- 分布式锁(一) Zookeeper分布式锁
- 10.1-uC/OS-III任务堆栈空间
- python-flask-wtforms组件流程源码
- C++ 关于MFC List Control 控件的使用事项 原创
- cyclone iv中DDR2的本地接口时序
- C#编程(四十一)----------用户定义的数据类型转换
- java常用类总结
- 去n的第一个出现的1
- 2018-2019-1 20189218《Linux内核原理与分析》第五周作业
- (并查集 建立关系)Parity game -- POJ -1733
- 『转』市售热门可穿戴式“活动追踪器 Tracker”导购指南
- Selective Search for Object Recognition