android-从另一个活动绑定到本地服务时发生ClassCastException

android-从另一个活动绑定到本地服务时发生ClassCastException,第1张

概述在我的应用程序中,我有两个分离的APK.第一个APK中的活动(A1)启动本地服务,并且能够调用此服务提供的方法.稍后,活动A1从第二个APK开始另一个活动(A2).A2活动尝试连接到由A1启动的本地服务.这两个活动都使用相同的SharedUserID在同一进程中运行.如LocalService的API示例所示,提供了

在我的应用程序中,我有两个分离的APK.第一个APK中的活动(A1)启动本地服务,并且能够调用此服务提供的方法.稍后,活动A1从第二个APK开始另一个活动(A2). A2活动尝试连接到由A1启动的本地服务.这两个活动都使用相同的SharedUserID在同一进程中运行.如LocalService的API示例所示,提供了服务接口.服务的onBind方法返回具有方法getService()的LocalBinder实例.
当调用A2的onServiceConnected时,当我尝试从IBinder投射到MyService.LocalBinder时遇到ClassCastException.

在调试器中,我可以看到A2活动的onServiceConnected服务参数是MyService.LocalBinder的正确实例.我什至可以在调试器中观看MyService的所有属性,但是当我尝试将IBinder服务投射到MyService.LocalBinder时,我得到了ClassCastException异常吗?有什么办法解决还是我必须使用AIDL?

public voID onServiceConnected(Componentname classname, IBinder service){  try  {       MyService.LocalBinder binder = (MyService.LocalBinder)service;       m_IService = binder.getService();  }  catch(ClassCastException e)  {  } }

解决方法:

对此不确定,但我猜测您已将MyService.LocalBinder编译为A1和A2 APK.这将产生这种异常,因为尽管它们具有相同的名称和相同的代码,但它们仍然是两个单独的类文件.我认为您需要将类移到共享库中才能完成此工作.

更新(回应评论):我看不到使用界面会有什么不同;与该类一样,该接口将在客户端和服务器上以不同的方式实例化,因此导致强制转换异常.您也许可以使用reflection来解决此问题,但是我不建议您使用这种方法-AndroIDOS或DalvikVM可能都不支持该方法.

我认为最好的方法是尝试创建AIDL接口,看看它是否能完成工作.它可能比尝试执行AndroID故意阻止的 *** 作要容易10倍.

但是,如果您想继续使用当前的方法,一种可能的途径是使用ClassLoader将客户端类加载到服务器中.我不确定是否可以使它正常工作.

总结

以上是内存溢出为你收集整理的android-从另一个活动绑定到本地服务时发生ClassCastException全部内容,希望文章能够帮你解决android-从另一个活动绑定到本地服务时发生ClassCastException所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1093223.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存