Android service传递的问题


主Activity里bindService建了一个Service,然后将此Service通过构造方法传给子类B,

class B(Service  service) {

    mBservice = ​service;

}

之后主Activity调用B类的testb()方法

testb() {

log.i(TAG,""+mBservice.num); //num是​service中一个int变量测试用的。

}

程序报错,mBservice.num空指针,查原因发现是因为:

主Activity里虽然执行了:

Intent intent = new Intent(this, CoreService.class);

bindService(intent, mServiceConnection, BIND_AUTO_CREATE);

但是此时Service并没有起的来,就立刻传给B,B中就调不到Service中的任何方法和变量了,后来我在确认Service启动完毕之后再传给B,就没有这个问题了。

由于之前开发C的,对指针比较敏感,所以这里我把传递的Service当成了指针传递,你主Activity开始传给B的时候Service没启动好,可是后来等你启动好了,B那边也应该跟着启动好了呀?此时我在调用testb() ,为什么还是空指针呢?

于是我猜测传递的不是指针而是值,为此我在主Activity里变跟service里num的值,再在B里面打印这个值,发现也跟着变,这就说明确实是传递的指针啊。于是我就迷茫了。。。(后来这个测试 我是在确认Service启动完毕之后再传给B的,避免了开始时候空指针的问题)

后来我是这么理解的:service对象必须建立后才能传给B(此时传的是service的引用),否则传过去的就是null,是C语言的指针概念让我想错了,我以为开始传过去service以后即使此时service还没建立对象,后面主Activity建立后,B中像指针一样也跟着建立了。

你可能感兴趣的:(android)