同じプロセスで実行される一連のアプリケーションがあります。これらのプロセスには共有ライブラリである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
上記のブロック コードは、このサイトからコピー ペーストされたものです。私の同僚は、アプリケーションごとに 1 つずつ、2 つのクラス ローダーによって共有ライブラリのロードされたクラスの 2 つの異なるインスタンスがあるという問題の根本を説明しているこのサイトを見つけました。サイトの作成者は、メソッド LayoutInflater.setFactory() を使用して、LayoutInflater による共有ビューの作成をオーバーライドするという回避策を提供しています。私の質問は、私の意見ではエラーが発生しやすく効率的ではない可能性があるAndroidライブラリのコアメソッドをオーバーライドする必要のない他のソリューションがあるかどうかです。
前もって感謝します:)