我有一组在同一进程中运行的应用程序。这些进程有一个共享库,即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
上面的块代码是从这个站点复制粘贴的。我的一位同事发现了这个站点,该站点描述了问题的根源,即每个应用程序的两个类加载器有两个不同的共享库加载类实例。该站点的作者提供了一种解决方法,即使用 LayoutInflater.setFactory() 方法覆盖 LayoutInflater 创建的共享视图。我的问题是,如果有任何其他解决方案不需要覆盖 Android 库的核心方法,我认为这可能容易出错且效率不高。
提前致谢:)