Android service传递的问题

文章探讨了Android开发中,从主Activity向子类传递Service实例时遇到的空指针异常问题。作者分析了问题原因,并分享了解决方案,即确保Service完全启动后再进行传递。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


主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中像指针一样也跟着建立了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值