Android service与activity绑定调用问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android service与activity绑定调用问题相关的知识,希望对你有一定的参考价值。

本人新手,在做一个app。
有几个不同的activity,和一个service,这几个activity分别与service绑定。我想让这个service在程序运行期间一直工作,它要提供一些信息给那几个activity。我想问的是这几个activity每次在调用startactivity到另一个activity之后,原来的activity是死掉了还是暂时不显示,那和它绑定的service呢?如果没死掉,那再次调用它时,会重新执行绑定service吗?

我调试时,经常在startactivity后service实例为空报错退出,怎么解决?

调用startactivity到另一个activity之后,原来的Activity会暂停,如果内存不够就会被kill掉。绑定的service也会调用destroy方法,因为你的service是用bindservice启动的。所以你的想法还是用startservice方法启动service然后再用广播进行activity与service之间的数据交换比较简单。追问

你的意思是说只要在mainActivity中调用startservice启动service后,程序运行结束前service就不会停止运行,也不需要service再和其他activity绑定,其他的activity在被调用时只要用广播和service进行数据交换就可以吗?

参考技术A 调用startactivity到另一个activity之后,原来的Activity会暂停,如果内存不够就会被kill掉。绑定的service也会调用destroy方法,因为你的service是用bindservice启动的。所以你的想法还是用startservice方法启动service然后再用广播进行activity与service之间的数据交换比较简单

android 四大组件值Service 绑定式服务

bound服务是指允许被应用程序组件绑定的服务,通过调用bindService()可以完成绑定,
用于创建一个长期存在的连接(并且一般不再允许组件通过调用startService()来start服务。 当应用程序中的activity或其它组件需要与服务进行交互,或者应用程序的某些功能需要暴露给其它应用程序时,
你应该创建一个bound服务,并通过进程间通信(IPC)来完成。 要创建一个bound服务,你必须实现onBind()回调方法,并返回一个IBinder对象,
此对象定义了与服务进行通信的接口。 然后,其它应用程序组件可以调用bindService()来获得接口
并调用服务中的方法。 服务只在为绑定的应用程序组件工作时才会存活,因此,只要没有组件绑定到服务,
系统就会自动销毁服务(你不需要像started服务中那样通过onStartCommand()来终止一个bound服务)。 要创建一个bound服务,首先必须定义好接口,用于指明客户端如何与服务进行通信
这个客户端与服务之间的接口必须是一个IBinder对象的实现,并且你的服务必须在onBind()
回调方法中返回这个对象。一旦客户端接收到这个IBinder,它就可以通过这个接口来与服务进行交互。 同一个服务可以被多个客户端绑定。当客户端完成交互时,会调用unbindService()来解除绑定。
一旦不存在客户端与服务绑定时,系统就会销毁该服务。 实现bound服务的方式可以有很多种,实现的过程也比started类型的服务更为复杂,
因此bound服务将在单独的bound服务文档中讨论。

 

以上是关于Android service与activity绑定调用问题的主要内容,如果未能解决你的问题,请参考以下文章

Android官方文档之Bound Services

Android 之 Service(一)启动,绑定服务

Android Service与Activity的交互

Android service与activity绑定调用问题

Android自学之路——Service与Activity通信

Android—Service与Activity的交互