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

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

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

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

public interface OnTransProgressChangeListener{
    void onProgressChange(long current,long max);
}
current参数表示当前进度,max表示进度的总长

 

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

private OnTransProgressChangeListener onTransProgressChangeListener;

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

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

onTransProgressChangeListener.onProgressChange(current,max);

3.用SessionActivity实现OnTransProgressChangeListener接口。

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

/**
 * 监听Activity与Service关联情况
 */
  ServiceConnection serviceConnection=newServiceConnection() {
    @Override
    public void onServiceConnected(ComponentName name,IBinder service) {
        TcpService.SimpleBindersimpleBinder=(TcpService.SimpleBinder) service;
        tcpService=simpleBinder.getService();
        //设置进度条更新
        tcpService.setOnTransProgressChangeListener(SessionActivity.this);
       }

    @Override
    public void onServiceDisconnected(ComponentName name) {
        //不连接

    }
};
 

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

/**
     * 更新进度条,用回调函数
     * @param current
     * @param max
     */
    @Override
    public void onProgressChange(final long current, final long max) {

        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                progressDialog.setProgress((int)((double)current/max*100));
                progressDialog.setMax(100);
                progressDialog.show();
                if(current==max)
                    progressDialog.hide();
            }
        });

    }



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值