自定义按钮内的 unbindService class
unbindService inside custom button class
我在解除绑定服务时遇到问题
我创建了一个 class 来自定义按钮。所以这个 class 扩展按钮 class。
在这个 class 上,我将 class 与远程服务绑定以更新按钮状态。
public class CustomButton extends Button implements View.OnClickListener {
private Activity mActivity;
public CustomButton(Context context) {
super(context);
init(context, null);
}
private void init(Context context, AttributeSet attrs) {
if (context instanceof Activity) {
this.mActivity = (Activity) context;
Intent intent = new Intent(mActivity, CustomService.class);
final IRemoteCustomServiceCallback callback = new IRemoteCustomServiceCallback.Stub() {
@Override
public void stateChanged(boolean state) throws RemoteException {
Log.i("stateChanged", "New state is " + String.valueOf(state));
setAvailableMode(state);
}
@Override
public IBinder asBinder() {
return this;
}
};
ServiceConnection remoteConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service)
{
mService = IRemoteCustomService.Stub.asInterface(service);
try {
int test = mService.getPid();
Log.i("test", String.valueOf(test));
mService.registerCallback(callback);
} catch (RemoteException e) {
e.printStackTrace();
}
}
@Override
public void onServiceDisconnected(ComponentName name) {
try {
mService.unregisterCallback(callback);
} catch (RemoteException e) {
e.printStackTrace();
}
mService = null;
}
};
boolean state = mActivity.bindService(intent, remoteConnection, 0);
}
问题是:当我关闭应用程序时,我得到一个错误:“[...] 泄露了最初绑定在这里的 ServiceConnection [...]”
我理解这个错误,但由于我没有收到 "signal" onStop 或 onDestroy,我无法解除绑定我的服务。
你知道我该如何解决吗?
你必须覆盖方法
protected void onDetachedFromWindow() {
}
使用此方法unregister/unbind您的远程服务
我在解除绑定服务时遇到问题
我创建了一个 class 来自定义按钮。所以这个 class 扩展按钮 class。
在这个 class 上,我将 class 与远程服务绑定以更新按钮状态。
public class CustomButton extends Button implements View.OnClickListener {
private Activity mActivity;
public CustomButton(Context context) {
super(context);
init(context, null);
}
private void init(Context context, AttributeSet attrs) {
if (context instanceof Activity) {
this.mActivity = (Activity) context;
Intent intent = new Intent(mActivity, CustomService.class);
final IRemoteCustomServiceCallback callback = new IRemoteCustomServiceCallback.Stub() {
@Override
public void stateChanged(boolean state) throws RemoteException {
Log.i("stateChanged", "New state is " + String.valueOf(state));
setAvailableMode(state);
}
@Override
public IBinder asBinder() {
return this;
}
};
ServiceConnection remoteConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service)
{
mService = IRemoteCustomService.Stub.asInterface(service);
try {
int test = mService.getPid();
Log.i("test", String.valueOf(test));
mService.registerCallback(callback);
} catch (RemoteException e) {
e.printStackTrace();
}
}
@Override
public void onServiceDisconnected(ComponentName name) {
try {
mService.unregisterCallback(callback);
} catch (RemoteException e) {
e.printStackTrace();
}
mService = null;
}
};
boolean state = mActivity.bindService(intent, remoteConnection, 0);
}
问题是:当我关闭应用程序时,我得到一个错误:“[...] 泄露了最初绑定在这里的 ServiceConnection [...]”
我理解这个错误,但由于我没有收到 "signal" onStop 或 onDestroy,我无法解除绑定我的服务。
你知道我该如何解决吗?
你必须覆盖方法
protected void onDetachedFromWindow() {
}
使用此方法unregister/unbind您的远程服务