我有一个需要绑定的服务,因为调用者需要一些反馈和返回值。至少有一个Activity,一个Fragment和一个ContentProvider应该使用绑定的服务。因此,所有使用对象都调用bindService。并且所有接收onServiceConnected。到目前为止没有问题,这可行。
但是然后:活动希望所有的片段都显示其内容,然后它们调用ContentProvider。碰巧的是,碎片和CP尚未绑定。因此,我不能确定在onServiceConnected期间是否连接了所有其他使用Service的对象。
如何解决呢?我想到了一些想法:
有没有一种方法可以控制接收onServiceConnected回调的对象的顺序?
是否有一个Activity生命周期回调,可以确保所有onServiceConnected调用都已完成?因此,是否有更好的方法来开始填充片段的内容?或者,也许,如果我在活动的onServiceConnected中发布消息,是否可以确定在所有其他onServiceConnected调用之后都处理了此消息?
另一个想法是,我将绑定的服务连接保存在其他地方的静态单个字段中。因为ContentProvider需要访问,所以我想到了Service类本身。但是,这似乎与约束服务的想法背道而驰?!?!
还有其他想法吗?
坦克斯·约克斯
最佳答案
嗯,看来我找到了解决方案:
在onServiceConnected中,我向UI线程发布了一条消息。据我了解,此消息是在所有其他未决的onServiceConnected回调完成后处理的。
所以现在我的代码看起来像:
private ServiceConnection mConnection = new ServiceConnection() {
@Override public void onServiceConnected(ComponentName name, IBinder service) {
HeftBinder binder = (HeftBinder)service;
mService = binder.getService();
mBound = true;
new Handler().post(new Runnable() {
@Override public void run() {
fillAllTheFragments();
}
});
}
有没有人在双/四核设备上尝试过类似的东西?
问候,Joerg
关于android - 如何确保所有服务连接都已绑定(bind)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10200160/