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等
}
};
}