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

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的... 要过一段时间的啊 --------------------编程问答--------------------
引用 4 楼 shayankuan 的回复:
不是你在调用了bindService就马上会执行 onServiceConnected的... 要过一段时间的啊


我在onStart()方法里sleep一段时间后,结果仍然没有改变。如果是过一段时间执行的话,我在哪儿里能真正读取到修改后的值呢? --------------------编程问答-------------------- service绑定连接是异步的,不能保证先后顺序!
我建议你定义一个回调函数吧,在执行onServiceConnected末尾回调一下 --------------------编程问答--------------------
引用 5 楼 dongond66 的回复:
引用 4 楼 shayankuan 的回复:不是你在调用了bindService就马上会执行 onServiceConnected的... 要过一段时间的啊

我在onStart()方法里sleep一段时间后,结果仍然没有改变。如果是过一段时间执行的话,我在哪儿里能真正读取到修改后的值呢?

在 调用 onServiceConnected以后再读啊 
补充:移动开发 ,  Android
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,