当前位置:编程学习 > wap >>

关于service与Activity之间通讯的问题

在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就传递不过去了,有哪位知道的,给指点下,多谢 --------------------编程问答-------------------- 第二次bind的时候?不是第二次bind调用不了onBind方法 --------------------编程问答-------------------- 在Activity中定义一个类,实现ServiceConnection接口,
然后通过这个类的onServiceConnected()方法,获取Service对象,从而可以直接和它交互。
这样就可以把实际的收发消息处理放到Service里实现,Activity只和Service交互。
具体可参考SDK的Service页的例子。 --------------------编程问答--------------------
引用 2 楼  的回复:
在Activity中定义一个类,实现ServiceConnection接口,
然后通过这个类的onServiceConnected()方法,获取Service对象,从而可以直接和它交互。
这样就可以把实际的收发消息处理放到Service里实现,Activity只和Service交互。
具体可参考SDK的Service页的例子。


++
--------------------编程问答-------------------- 感谢楼上的支持,不过我的问题是,只有第一次是全部成功的,之后第二次就不再调用OnBind方法,只好手工将messgener对象通过获取的Service对象,直接传给Service对象,感觉有些混乱,所以求助。
有没有清晰明确的解决方法呐 --------------------编程问答-------------------- 窗口关闭的时候要unBindService(),这个是不允许绑定两次的。 --------------------编程问答-------------------- 第二次bind的时候不会再执行onbind() --------------------编程问答-------------------- --------------------编程问答-------------------- 确实是,第二次bind的时候不会再执行onbind()。
不过我这个Activity已经结束了,执行了OnDestroy()方法。当这个Activity第二次被打开的时候,重新开始执行,OnCreate,Onstart,OnResume方法,执行不了onbind()
反正现象就是这样了,道理不明白,Activity应该是重新生成的了,也算第二次吗。不过如果其他的Activity去bind的话,还是会执行onbind()方法的
补充:移动开发 ,  Android
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,