BindService标准写法

BindService标准写法

在使用bindservice时,经常会忽略掉死亡回调的作用,下面提供一个标准的bindService的使用流程,仅供参考


import android.app.Activity;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;
import android.os.RemoteException;
import android.util.Log;
import ITestBinder;

public class Test extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Intent intent = new Intent("xxxx");
        bindService(intent,serviceConnection, Context.BIND_AUTO_CREATE); //绑定service
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        unbindService(serviceConnection); //解绑service
    }

    ITestBinder iBinder;
    ServiceConnection serviceConnection = new ServiceConnection() {
    
        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            iBinder = ITestBinder.Stub.asInterface(service);
            try {
                // 注册死亡回调
                iBinder.asBinder().linkToDeath(mDeathRecipient, 0);
                //TODO 想要进行的主业务
            } catch (RemoteException e) {
                Log.e("TAG", "onServiceConnected:" + e.getMessage());
            }


        }

        @Override
        public void onServiceDisconnected(ComponentName name) {

            iBinder = null; //资源释放
        }
    };


    /**
     * 死亡回调 service异常结束时 客户端会在这个回调函数里得到通知
     */
    IBinder.DeathRecipient mDeathRecipient = new IBinder.DeathRecipient() {
        @Override
        public void binderDied() {

            iBinder.asBinder().unlinkToDeath(mDeathRecipient, 0); //释放死亡回调
            iBinder = null; //资源释放
            //TODO 其他处理,例如重新绑定service等

        }
    };
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值