bindService不调用onServiceConnected的问题

article/2025/10/1 7:53:38

bindService不调用onServiceConnected的问题

昨天做一个项目时,Activity需要bindService获取到service实例与service进行交互,创建好service如下(例):

class MyService{private IBinder mBinder = new MyServicerBinder();@Overridepublic IBinder onBind(Intent intent){return mBinder;}....  //service其他生命周期方法public class MyServiceBinder extends Binder{public MyService getService(){return MyService.this;}}//测试方法public void doSomething(){}
}

在AndroidManifest.xml中注册:

<service android:name=".MyService"/>

调用:

private MyService mService;
private ServiceConnection connection = new ServiceConnection() {@Overridepublic void onServiceConnected(ComponentName name, IBinder service) {mService = ((MyService.MyServiceBinder) service).getService();}@Overridepublic void onServiceDisconnected(ComponentName name) {mService = null;}
};
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);Intent intent = new Intent(this, MyService.class);//绑定servicebindService(intent, connection, Context.Context.BIND_AUTO_CREATE);//测试是否拿到service实例mService.doSomething();

结果在mService.doSomething()行报错,mService为空。看上去已经调用bindService,为什么mService还是为空?通过设置断点发现onServiceConnected方法并没有调用,于是各处查资料,尝试过的方法包括:
1. 绑定时使用application的上下文:

getApplicationContext.bindService()

2. 注册时Service节点使用完整的包名

<service android:name="com.liuconen.example.MyService"/>

以上方法仍然没有解决,直到在stackOverFlow上看到一位大牛的回答:
这里写图片描述
地址为:
http://stackoverflow.com/questions/9246657/serviceconnection-onserviceconnected-never-called-after-binding-to-started-ser?newreg=2632e05fed454a96b271b008c0b56154

大意是,onServiceConnected在绑定成功时进行回调,但不保证在执行binService后立马回调,我们在onCreate方法中绑定后立马获取service实例,但此时不保证onServiceConnected已经被回调。 也就是我们onCreate方法执行时onServiceConnected还没有别调用。此时当然mService还为空了。

按照这位答者的解决,把对mService进行引用的操作放在onServicerConnected方法下,就不会出错了。

目前没有找到更为优雅的解决办法,如有大神路过请不吝赐教。


http://chatgpt.dhexx.cn/article/CSpDxuAg.shtml

相关文章

bind服务

一、域名 www.baidu.com www.baidu.com. &#xff08;.&#xff09;根域 &#xff08;com&#xff09;一级域名 &#xff08;baidu&#xff09;二级域名 二、DNS解析记录分类 A记录、CNAME、MX记录、NS记录 1、A记录 通过域名直接查询到IP 例如&…

bindService启动流程

通过bindService启动的Service,会执行Service的onCreate、onBind、onUnbind、onDestroy方法&#xff0c;可以通过onBind方法返回的Binder对象和调用端进行通信&#xff0c;并且Service的生命周期和调用端同步。 如下是启动bindService的代码 var stu: Student? null val con…

AIDL报错,bindService一直连接不上、不起作用。

先说问题&#xff0c;最近用aidl&#xff0c;发现bindService根本就不走&#xff0c;不知道咋回事&#xff0c;明明写的没有任何毛病啊&#xff1f; //aidl绑定private void bind() {Intent intent new Intent();String pkg "com.example.mzz_service";//需要调用…

服务两种启动方式(startService与bindService)的区别

综上两篇文章 1.Android Service的基本用法&#xff08;startService启动方式生命周期&#xff09; 2.Android Service与Activity之间的通信&#xff08;bindService启动方式&#xff09; 区别如下&#xff1a; 一.生命周期上的区别 startService启动服务&#xff1a;Service会…

进程间通讯:Binder:bindService之 onServiceConnected回调

1&#xff1a;bindService官方概述 很明显 通过Google官方文档描述&#xff0c;我们知道 1&#xff1a;bindService&#xff08;&#xff09;的返回值只是表明服务是否存在&#xff1b; 2&#xff1a;真正能代表是否成功绑定服务的是触发onServiceConnected&#xff08;&…

Android入门第41天-Android中的Service(bindService)

介绍 在前一天我们介绍了Android中有两种启动Service的方法。并擅述了startService和bindService的区别。同时我们着重讲了startService。 因此今天我们就来讲bindService。bindService大家可以认为它是和Android的一个共生体。即这个service所属的activity如果消亡那么bindS…

Android Binder框架实现之bindService详解

Android Binder框架实现之bindService详解 Android Binder框架实现目录&#xff1a; Android Binder框架实现之Binder的设计思想 Android Binder框架实现之何为匿名/实名Binder Android Binder框架实现之Binder中的数据结构 Android Binder框架实现之Binder相关的接口和类 Andr…

Android bindService流程

一. 前言 我们可以通过startService来启动一个服务, 当然也可以通过bindService绑定一个服务,本篇文章我们来讲一讲绑定服务的完整流程, 阅读此文之前,建议先阅读一下笔者的这三篇文章 Android 进程间通信机制(三) 系统进程与应用进程通信 Android 进程间通信机制(四) 应用进程…

bind服务程序

一、介绍 1、bind服务是全球范围内使用最广泛、最安全可靠且高效的域名解析服务程序。 2、为了有效地限制bind服务程序仅能对自身的配置文件进行操作&#xff0c;以确保整个服务器的安全&#xff0c;在安装部署bind服务程序时加上chroot&#xff08;俗称牢笼机制&#xff09;…

startService bindService 区别

Android执行Service有两种方法&#xff0c;一种是startService&#xff0c;一种是bindService。下面让我们一起来聊一聊这两种执行Service方法的区别。 1、生命周期上的区别 执行startService时&#xff0c;Service会经历onCreate->onStartCommand。当执行stopService时&…

Android中Service使用bindService

前面已经对Service的startServer方式启动一个服务了解过了&#xff0c;现在来看一下Service的另一种启动方式→bindServer bindServer使用场景 1、在同个app之间调用&#xff08;即是同一个进程中&#xff09; 2、在不同app之间调用&#xff08;即是跨进程间通信&#xff09…

Android——bindService()方法启动服务

通过绑定服务来启动的话需要注意创建一个类来实现ServiceConnection接口&#xff0c;重写onServiceConnected&#xff08;&#xff09;和onServiceDisconnected&#xff08;&#xff09;方法。这个类用于服务的连接。成功绑定服务时&#xff0c;会调用onServiceConnected&#…

Android Service 服务(三)—— bindService与remoteService

一、bindService简介 bindService是绑定Service服务&#xff0c;执行service服务中的逻辑流程。 service通过Context.startService()方法开始&#xff0c;通过Context.stopService()方法停止&#xff1b;也可以通过Service.stopSelf()方法或者Service.stopSelfResult()方法来停…

SO_BINDTODEVICE 使用

就绑定到了接口"lmi40"上,所有数据报的收发都只经过这个网卡. 对于SOL_BINDTODEVICE的总结如下: &#xff08;1&#xff09; 对于TCP套接口、UDP套接口、RAW套接口&#xff0c;可以通过SO_BINDTODEVICE套接口选项将套接口绑定到指定的网络接口上。绑定之后&…

startService与bindService的区别

Android执行Service有两种方法&#xff0c;一种是startService&#xff0c;一种是bindService。下面让我们一起来聊一聊这两种执行Service方法的区别。 1、生命周期上的区别 执行startService时&#xff0c;Service会经历onCreate->onStartCommand。当执行stopService时&…

startService和bindService的区别

首先看下其生命周期的区别&#xff1a; 生命周期&#xff1a; onCreate → startCommand → onDestroy onCreate → onBind→onUnBind→ onDestroy 静态绑定对应着startService&#xff1b;动态绑定对应着bindService&#xff0c;静态有自己独立的生命周期&#xff0c;动态会…

bindService的使用

bindService与starService之间的区别&#xff1a; 在程序通过startService&#xff08;&#xff09;方法启动的服务&#xff0c;会长期在后台运行&#xff0c;并且启动服务的组件与服务之间没有关系&#xff0c;即使启动服务的组件被销毁&#xff0c;服务还是会运行。 但是当一…

Service学习以及BindService的使用

Service 什么是Service Service是一个可以在后台执行长时间操作而不使用用户界面的应用组件。 如何使用Service 我们首先需要实现一个Service的子类。主要实现Service的onCreat&#xff08;&#xff09;&#xff0c;onStartCommand&#xff08;&#xff09;&#xff0c;onB…

Android中bindService的使用及Service生命周期

Android中有两种主要方式使用Service&#xff0c;通过调用Context的startService方法或调用Context的bindService方法&#xff0c;本文只探讨纯bindService的使用&#xff0c;不涉及任何startService方法调用的情况。如果想了解startService相关的使用&#xff0c;请参见《Andr…

粒子群算法笔记

实质&#xff1a;在定义域随机放置多个变量&#xff0c;不断跳跃&#xff0c;同步寻找最优解。寻找方向受单个粒子与全部粒子的最优位置共同影响。单个粒子按照公式不断迭代寻找当新位置。多个变量聚集在某一点时&#xff0c;该点即是最优解。 控制其搜索速度&#xff08;步长…