在service与Activity之间通讯,我现采用这种方式:
在Activity开始bindService的时候,传递一个messenger过去,当service通过网络取得数据后,写回messenger,由Activity中实现的handle来处理,
public Handler mHandler = new Handler() {     public void handleMessage(Message msg) {
        }
    };Messenger messenger = new Messenger(mHandler);Intent intentService = new Intent(this, SocketCommService.class);
intentService.putExtra("MESSENGER", messenger);
_service_bind = bindService(intentService, serviceConnection, Context.BIND_AUTO_CREATE);
service中部分:
@Override
public IBinder onBind(Intent intent) {
Bundle extras = intent.getExtras();
if (extras != null) {
messenger = (Messenger) extras.get("MESSENGER");
Log.e(TAG, "get messenger "+messenger.toString());
}else {
Log.e(TAG, "extras is null! can not get messenger ");
}

Log.i(TAG, "service onBind.");
return serviceBinder;
}
发消息:
Message msg = Message.obtain();
msg.what =type;
if (type==QUOTE) {
msg.obj = parseContent(content);

else if (type==ERROR) {
msg.arg2 = -1;
}
//myHandler.sendMessage(msg);
try {
messenger.send(msg);
} catch (RemoteException e) {
Log.w(getClass().getName(), "Exception sending message", e);
e.printStackTrace();
}
现在问题是,如果只连接一次,就没有问题,很正常,但如果第二次bind的时候,messenger就传递不过去了,有哪位知道的,给指点下,多谢

解决方案 »

  1.   

    第二次bind的时候?不是第二次bind调用不了onBind方法
      

  2.   

    在Activity中定义一个类,实现ServiceConnection接口,
    然后通过这个类的onServiceConnected()方法,获取Service对象,从而可以直接和它交互。
    这样就可以把实际的收发消息处理放到Service里实现,Activity只和Service交互。
    具体可参考SDK的Service页的例子。
      

  3.   

    感谢楼上的支持,不过我的问题是,只有第一次是全部成功的,之后第二次就不再调用OnBind方法,只好手工将messgener对象通过获取的Service对象,直接传给Service对象,感觉有些混乱,所以求助。
    有没有清晰明确的解决方法呐
      

  4.   

    窗口关闭的时候要unBindService(),这个是不允许绑定两次的。
      

  5.   

    第二次bind的时候不会再执行onbind()
      

  6.   

    确实是,第二次bind的时候不会再执行onbind()。
    不过我这个Activity已经结束了,执行了OnDestroy()方法。当这个Activity第二次被打开的时候,重新开始执行,OnCreate,Onstart,OnResume方法,执行不了onbind()
    反正现象就是这样了,道理不明白,Activity应该是重新生成的了,也算第二次吗。不过如果其他的Activity去bind的话,还是会执行onbind()方法的