bindService不懂求解
我想在一个Activity/Service中启动一个新Service,获得它的引用,并操作新的Service。查资料发现要使用bindService
但是我做了个实验,发现和预期不一样,这是我在调用端写的代码
private int a = 0;
private ServiceConnection sc = new ServiceConnection(){
@Override
public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
a = ((CommandExecutor.CEBinder)iBinder).getData();
Log.d("test", ""+a);
}
@Override
public void onServiceDisconnected(ComponentName componentName) {
}
};
@Override
public void onCreate() {
super.onCreate();
Log.d("test", "onCreate() a="+a);
//启动命令执行器服务
Intent service = new Intent(this.getApplicationContext(), CommandExecutor.class);
this.bindService(service, sc, Context.BIND_AUTO_CREATE);
}
@Override
public void onStart(Intent intent, int startId) {
Log.d("test", "onStart() a="+a);
}
这是新的Service代码:
public class CommandExecutor extends Service {
private TelephonyManager tel = null;
@Override
public IBinder onBind(Intent intent) {
return new CEBinder();
}
public class CEBinder extends Binder {
int getData(){
return 1;
}
}
我觉得bindService方法一经调用,在onStart()方法中a的值应该变为1才对。
但实际上我根据输出发现,调用bindService方法后,原来Service中要继续吧onStart()方法执行完,才会触发onServiceConnected()方法。 这样的话,我拿到新Service的引用还有何意义?想要使用引用的话就要等到旧的Service跑完。。。。
这个地方不懂,麻烦高手解答一下。 --------------------编程问答-------------------- 我感觉这应该是一个异步的过程吧。 --------------------编程问答-------------------- 顶一个!! --------------------编程问答-------------------- 你可以在调一次startService --------------------编程问答-------------------- 不是你在调用了bindService就马上会执行 onServiceConnected的... 要过一段时间的啊 --------------------编程问答--------------------
我在onStart()方法里sleep一段时间后,结果仍然没有改变。如果是过一段时间执行的话,我在哪儿里能真正读取到修改后的值呢? --------------------编程问答-------------------- service绑定连接是异步的,不能保证先后顺序!
我建议你定义一个回调函数吧,在执行onServiceConnected末尾回调一下 --------------------编程问答--------------------
在 调用 onServiceConnected以后再读啊
补充:移动开发 , Android