使用共享项目库在共享进程上运行多个应用程序

时间:2012-06-27 10:23:34

标签: java android shared-libraries shared

我有一组在同一进程中运行的应用程序。这些进程有一个共享库,ActionBarSherlock,因此它们在不同版本的Android中具有相同的UI。我第一次访问ActionBarSherlock库的元素一切正常。但是当我在同一个Android进程中从不同的应用程序访问相同的元素时,我会收到如下错误:

E/AndroidRuntime(  797): java.lang.RuntimeException: Unable to start activity \
    ComponentInfo{xper.tristram/xper.tristram.XperTristramActivity}: \
    java.lang.ClassCastException: xper.common.CommonView cannot be cast to xper.common.CommonView
E/AndroidRuntime(  797):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1955)
E/AndroidRuntime(  797):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1980)
E/AndroidRuntime(  797):    at android.app.ActivityThread.access$600(ActivityThread.java:122)
E/AndroidRuntime(  797):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1146)
E/AndroidRuntime(  797):    at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime(  797):    at android.os.Looper.loop(Looper.java:137)
E/AndroidRuntime(  797):    at android.app.ActivityThread.main(ActivityThread.java:4340)
E/AndroidRuntime(  797):    at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(  797):    at java.lang.reflect.Method.invoke(Method.java:511)
E/AndroidRuntime(  797):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
E/AndroidRuntime(  797):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
E/AndroidRuntime(  797):    at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime(  797): Caused by: java.lang.ClassCastException: \
    xper.common.CommonView cannot be cast to xper.common.CommonView
E/AndroidRuntime(  797):    at xper.tristram.XperTristramActivity.onCreate(XperTristramActivity.java:29)
E/AndroidRuntime(  797):    at android.app.Activity.performCreate(Activity.java:4465)
E/AndroidRuntime(  797):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
E/AndroidRuntime(  797):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1919)
E/AndroidRuntime(  797):    ... 11 more

上述块代码是从this site复制粘贴的。我的一位同事发现这个网站描述了问题的根源,即每个应用程序的两个类加载器有两个不同的共享库加载类实例。该站点的作者提供了一种解决方法,即使用LayoutInflater.setFactory()方法覆盖LayoutInflater创建的共享视图。我的问题是,如果有任何其他解决方案不需要覆盖Android库的核心方法,我认为这些方法容易出错并且效率不高。

提前致谢:)

0 个答案:

没有答案