Android 如何更好地处理从服务到片段的处理程序消息?
对于从启动的服务到片段的通信,我是这样做的: 在服务机构中Android 如何更好地处理从服务到片段的处理程序消息?,android,android-fragments,android-service,android-handler,Android,Android Fragments,Android Service,Android Handler,对于从启动的服务到片段的通信,我是这样做的: 在服务机构中 Handler handler; public synchronized void setHandler(Handler h) { handler = h; } protected synchronized void sendMessage(int arg1) { Message m = handler.obtainMessage(); m.arg1=arg1; handler.sendMe
Handler handler;
public synchronized void setHandler(Handler h)
{
handler = h;
}
protected synchronized void sendMessage(int arg1)
{
Message m = handler.obtainMessage();
m.arg1=arg1;
handler.sendMessage(m);
}
在片段中:
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
LocalBinder binder = (LocalBinder) service;
mService = ("service_name") binder.getService();
mService.setHandler(serviceHandler);
}
以及:
在onDestroy中,我是这样做的:
现在在fragment的ondestroy中,我执行以下操作:
if (mIsBound) {
// Detach our existing connection.
App.getAppContext().unbindService(mConnection);
mIsBound = false;
}
用于绑定和解除绑定服务的函数:
void doBindService() {
Appbike.getAppContext().bindService(new Intent(getActivity(), Bike_ble_service.class), mConnection,Context.BIND_AUTO_CREATE);
mIsBound = true;
}
/**
* Detach our existing connection
*/
void doUnbindService() {
if (mIsBound) {
Appbike.getAppContext().unbindService(mConnection);
mIsBound = false;
}
}
@Override
public IBinder onBind(Intent intent) {
iHaveToSendMsg = true;
return mBinder;
}
@Override
public boolean onUnbind(Intent intent)
{
iHaveToSendMsg = false;
return true;
}
edit2:现在在我使用的服务中
public class LocalBinder extends Binder {
LocalService getService() {
// Return this instance of LocalService so clients can call public methods
return LocalService.this;
}
}
@Override
public IBinder onBind(Intent intent) {
return mBinder;
}
在片段中,我可以通过活页夹调用服务函数
如何解决我的问题?如果我取消绑定服务,来自服务的消息将继续到达
我必须改变一切吗
解决方案:我尝试在服务中这样做:
void doBindService() {
Appbike.getAppContext().bindService(new Intent(getActivity(), Bike_ble_service.class), mConnection,Context.BIND_AUTO_CREATE);
mIsBound = true;
}
/**
* Detach our existing connection
*/
void doUnbindService() {
if (mIsBound) {
Appbike.getAppContext().unbindService(mConnection);
mIsBound = false;
}
}
@Override
public IBinder onBind(Intent intent) {
iHaveToSendMsg = true;
return mBinder;
}
@Override
public boolean onUnbind(Intent intent)
{
iHaveToSendMsg = false;
return true;
}
在sendmessage中,我检查标志,如果它为false,我不发送消息。有可能的解决办法吗
我的解决方案的问题:“在我的解决方案中,有一个问题…Onbind并不是每次我执行bindService时都调用的:/我能做什么?
我无法重写所有代码并使用回调,因为这一次我必须使用处理程序消息
可能的解决方案:我可以在setHandler()函数中设置标志吗
在onStop或onPause中注销您的客户端并在onStart/OnResume中注册为什么要使用消息?您有本地绑定服务,对吗?所以使用“本地绑定服务”模式不,不使用Messenger,请参阅,然后只使用简单的回调为什么每次客户端绑定时都要调用它?