Android用回调函数实现Service中更新Activity进度条

原文地址:http://blog.csdn.net/e_one/article/details/51811266


本文地址:http://blog.csdn.net/e_one/article/details/51811266

场景:博主做个文件传输的项目,有名称为TcpService的类。该类继承至Service类,主要负责Socket通信,在Socket传输文件的时候,我们需要实时更新UI来提高用户体验。假设我们更新的是SessionActivity类的UI,该类继承至Activity。并且SessionActivity绑定TcpService。现在我们就要用回调函数在TcpService类里面更新SessionActivity里面的UI。

1.我们写一个接口,名称为OnTransProgressChangeListener。

[java]  view plain  copy
  1. public interface OnTransProgressChangeListener{  
  2.     void onProgressChange(long current,long max);  
  3. }  
current参数表示当前进度,max表示进度的总长

 

2.在TcpService类里声明该接口的字段。

[java]  view plain  copy
  1. private OnTransProgressChangeListener onTransProgressChangeListener;  

并声明一个方法,该方法只有一个参数,它是OnTransProgressChangeListener类型的,目的是接受SessionActivity的传来的OnTransProgressChangeListener实例。
[java]  view plain  copy
  1. public void setOnTransProgressChangeListener(OnTransProgressChangeListener onTransProgressChangeListener)  
  2. {  
  3.     this.onTransProgressChangeListener=onTransProgressChangeListener;  
  4. }  

在TcpService需要更新UI的地方,只需要按参数调用:

 
[java]  view plain  copy
  1. onTransProgressChangeListener.onProgressChange(current,max);  

3.用SessionActivity实现OnTransProgressChangeListener接口。

由于SessionActivity是绑定TcpService的,所以我们可以在他们连接的时候得到TcpService的实例。并调用TcpService实例的setOnTransProgressChangeListener方法给TcpService设置OnTransProgressChangeListener的实例。

[java]  view plain  copy
  1. /** 
  2.  * 监听Activity与Service关联情况 
  3.  */  
  4.   ServiceConnection serviceConnection=newServiceConnection() {  
  5.     @Override  
  6.     public void onServiceConnected(ComponentName name,IBinder service) {  
  7.         TcpService.SimpleBindersimpleBinder=(TcpService.SimpleBinder) service;  
  8.         tcpService=simpleBinder.getService();  
  9.         //设置进度条更新  
  10.         tcpService.setOnTransProgressChangeListener(SessionActivity.this);  
  11.        }  
  12.   
  13.     @Override  
  14.     public void onServiceDisconnected(ComponentName name) {  
  15.         //不连接  
  16.   
  17.     }  
  18. };  
  19.    

4.在SessionActivity的onProgressChange方法里更新进度条

[java]  view plain  copy
  1. /** 
  2.      * 更新进度条,用回调函数 
  3.      * @param current 
  4.      * @param max 
  5.      */  
  6.     @Override  
  7.     public void onProgressChange(final long current, final long max) {  
  8.   
  9.         runOnUiThread(new Runnable() {  
  10.             @Override  
  11.             public void run() {  
  12.                 progressDialog.setProgress((int)((double)current/max*100));  
  13.                 progressDialog.setMax(100);  
  14.                 progressDialog.show();  
  15.                 if(current==max)  
  16.                     progressDialog.hide();  
  17.             }  
  18.         });  
  19.   
  20.     }  

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值