关于aidl的问题???????

问题描述

有两个应用A和B,通过aidl来来共享服务,现在有个问题:当我想把服务Destroy的时候,为什么要A和B都unbind后,才会Destroy;为什么不是谁create的,就由谁Destroy??????你们能看懂我说的吗?????

解决方案

官方文档上写的很清楚,即便你调用了stopService,但系统只会在当前服务的请求者全部unbind后,才会真正停止这个Service。public abstract boolean stopService (Intent service)Since: API Level 1Request that a given application service be stopped. If the service is not running, nothing happens. Otherwise it is stopped. Note that calls to startService() are not counted -- this stops the service no matter how many times it was started.Note that if a stopped service still has ServiceConnection objects bound to it with the BIND_AUTO_CREATE set, it will not be destroyed until all of these bindings are removed. See the Service documentation for more details on a service's lifecycle.
解决方案二:
你多次绑定一个服务的时候,service的onCreate()方法只调用一次。

时间: 2024-10-24 14:08:56

关于aidl的问题???????的相关文章

Android远程service aidl的用法

AIDL即android 接口定义语言,概念不多说,网上有太多的帖子介绍概念.本文只想说明一下aidl的用法.由于最近开发一个播放器的项目使用了aidl.aidl是解决进程间通信用的.在本例中就是Activity(即client端)与Service(即服务端)的通信. 首先,定义Aidl文件,如Service中暴露给Activity的接口可以定义在aidl文件中,反之也一样.本文中,Service给Activity使用接口文件是ServiceAidl.aidl而Activity给Service回

Android:Service之AIDL传递系统基本类型数据

  什么是AIDL? 先来回顾一下,Android在本地的Service中如何与其它组件进行交互的,首先Service必须实现其onBind()方法,然后在onBind方法传递一个IBinder接口的实现,而在其它组件中使用bindService()绑定一个服务,再通过其中的参数ServiceConnection对象获取到Service中定义的IBinder接口的实现.那么与Service进行数据交互,其实就是传递一个IBinder,通过这个IBinder进行交互. 而现在就碰到一个问题,在同一

Android:Service之AIDL传递复杂对象

  AIDL传递复杂类型对象的特殊处理 前面已经介绍了通过AIDL接口在进程间传递系统允许的数据,如果需要传递一个复杂类型的对象,就没那么简单了,需要额外做一些处理.如下: 定义数据接口的AIDL文件中,使用parcelable关键字,例如:parcelable Message; 在其数据实现类中实现Parcelable接口,并实现对应的方法. 在业务接口的AIDL文件中,使用import引入数据接口AIDL的包名. 例如:Message.aidl 1 parcelable Message; 例

Android-使用AIDL进程间通信

对于客户端和服务之间通信,虽然可以通过Ibinder实现,但需要共享业务实现,如果在进程间通信的haunted,需要使用AIDL(Android Interface Definition Language)进行. AIDL是一种接口定义语言,用于约束两个进程间的通讯规则,编译器生成代码,实现Android设备上的两个进程间通信(IPC),AIDL的IPC机制和EJB所采用的CORBA很类似,进程之间的通信信息,首先会被转换成AIDL协议消息,然后发送给对方,对方收到AIDL协议消息后在转换成相应

android studio-Android Studio1.4版本无法在MainActivty中创建AIDL接口对象,rebuild提示aidl.exe出错,该如何解决?

问题描述 Android Studio1.4版本无法在MainActivty中创建AIDL接口对象,rebuild提示aidl.exe出错,该如何解决? Android Studio1.4版本无法在MainActivty中创建AIDL接口对象,rebuild提示aidl.exe出错,该如何解决? 解决方案 Android Studio中创建AIDL Service

非ROOT实现静默安装的一些思考与体会,AIDL获取IPackageManager,反射ServiceManager,系统签名

非ROOT实现静默安装的一些思考与体会,AIDL获取IPackageManager,反射ServiceManager,系统签名 最近自家的系统要做一个升级服务,里面有三个功能,第一个是系统升级,也就是下载OTA包推送到recovery里升级的,而第二个是MCU升级,这就涉及到我们自家系统的一些情况了,而第三个就是应用升级了,领导要求不要骚扰用户,于是我就想到了静默安装了,因为我们的系统是在wifi环境下工作的,所以不担心流量哈,而且我们系统是没有ROOT的,所以我们肯定野不能使用RunTime方

aidl使用问题,有点乱!!!

问题描述 aidl使用问题,有点乱!!! 很多博文说复制aidl文件到客户端时,包名不能改变,但是我写了Demo,证明改了包名也是没有问题的,只要自动生成的.java里DESCRIPTOR字段和服务器端自动生成的一样就没问题,不一样就会报错.但是我们公司有两个项目,包名和DESCRIPTOR字段都和服务器不一样,但是也没问题,晕了,,,不知道怎么回事,请大神赐教! 解决方案 http://blog.csdn.net/stonecao/article/details/6425019

Android AIDL实现进程间通信探索_Android

前言:       前面总结了程序间共享数据,可以使用ContentProvider也可以使用SharedPreference,那么进程间怎么共享内存呢?Android系统中的进程之间不能共享内存,因此,需要提供一些机制在不同进程之间进行数据通信.       为了使其他的应用程序也可以访问本应用程序提供的服务,Android系统采用了远程过程调用(Remote Procedure Call,RPC)方式来实现.与很多其他的基于RPC的解决方案一样,Android使用一种接口定义语言(Inter

aidl-Android studio写AIDL时报错:Execution failed for task,

问题描述 Android studio写AIDL时报错:Execution failed for task, 我用的是Android Studio 1.4 第二张图compile sdk version那里只能选api level 23. 在aidl包下我写了2个aidl文件,另外MainActivity那个包中的MyParcelClass,这3个和aidl有关.下面贴下代码: MyParcelClass.java public class MyParcelableClass implement

android跨进程通信(IPC):使用AIDL

AIDL的作用 AIDL (Android Interface Definition Language) 是一种IDL 语言,用于生成可以在Android设备上两个进程之间进行进程间通信(interprocess communication, IPC)的代码.如果在一个进程中(例如Activity)要调用另一个进程中(例如Service)对象的操作,就可以使用AIDL生成可序列化的参数. AIDL IPC机制是面向接口的,像COM或Corba一样,但是更加轻量级.它是使用代理类在客户端和实现端传