AIDL中遇到的问题,记录一下 + 避免绑定启动service 后 activity 与service 之间参数为null的情况

本文探讨了Android中AIDL(Android Interface Definition Language)用于进程间通信的原理与实践技巧。重点介绍了如何避免因进程隔离导致的对象传递问题,并分享了解决方案,如在Service的onCreate中初始化对象以及直接调用远程方法而非赋值全局变量等。

1.server程序中创建一个对象,在activity所有状态中打印这个对象,先运行服务端,在运行client

2.通过bindService连接-->oncreate-->onBind-->onServiceConnected

3.调用server接口代码,打印这个对象 输出为null ,将client finish后,server程序显示,在activity状态中 对象不为null....


下班,下周再解决


解决方法,在使用AIDL通讯时候,变量的初始化最好在service 的oncreate中实例化,如果在app 的activity中实例化后,Aidl访问的时候因为不是同一个进程空间所以实例化的对象没有被访问到。但是在service 的oncreate 实例化后,跨进程可以访问。


2014-9-2

隔了一段时间才发现为什么老是出现参数为null,已经在mainservice 中声明并且赋值了变量,

activity 启动时候 startservice (mainservice ),mainservice 中实例化ServiceUtil对象并是i绑定远程service,同时有个全局静态远程接口对象的属性并创建成功时候通过ServiceUtil.getRemote()赋值,这样就可以通过全局静态使用这个远程接口对象

然后问题就出现了,当创建成功、赋值时候这个全局静态远程接口对象都是不为空的,但是在acticity使用的时候就出现了空的现象,个人也不明白是什么原因,如果要说的话只能说他们两个不是在 一个进程空间的


决解的办法是不要使用getRemote来赋值,而是直接getRemote().xxx(调用远程接口方法。


2014-11-14

在使用服务程序时候,在某个类里面设置了基本类型的静态变量,在服务被destroy后再被onbind时候,这基本类型的静态变量没有恢复默认值,但是不是基本类型的可以恢复到默认值。....


2015-1-20

在连接server线程中注册了一个车载蓝牙连接广播,收到广播时候创建一个Client,因为Client 构造函数中又使用到了两个AIDL连接----问题出现了 在没创建一个AIDL 耗时3-4s

这是不能忍受的,当socket连接上的时候才基本上不耗时

解决办法:再在server线程中创建一个监听线程类,使用wait 和notify来出来链接监听和创建Client 就不会出现耗时太久的问题

原因:不清除。。。。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值