在我的应用程序中,我有两个分离的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所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)