同じプロセスとユーザー ID を共有する 2 つの Android アプリケーション (アプリケーション A とアプリケーション B) を作成しました。両方のアプリケーションでジェネリック アクティビティを定義しました。GenericActivity の名前空間とクラス名は両方のアプリケーションで同じですが、内容は異なります。
したがって、アプリケーションAは
package com.company.ui;
public class GenericActivity extends Activity{
//some content
}
そしてアプリケーションBは
package com.company.ui;
public class GenericActivity extends Activity{
//some different content
}
最初にアプリケーション A を起動し、次にアプリケーション A からアプリケーション B を起動します。両方のアプリケーションのクラスローダーが異なるため、両方のアプリケーションを起動すると、GenericActivity クラスの 2 つのコピーが各クラスローダーに関連付けられていることがわかります。次に、各アプリケーションに関連付けられます。ここまでは順調ですね。
ここで、両方のアプリをバックグラウンドで実行し、アプリケーション A を強制終了します。次に、アプリケーション A を再起動します。アプリケーション AI には、このようなコードを持つフラグメントがあります。
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mActivity = (GenericActivity) getActivity();
}
ここに問題があります。ここでクラスキャスト例外が発生します。デバッグ後、アプリケーション B の GenericActivity にキャストしようとしていることがわかりました。別のクラス ローダーによってロードされた別のクラスであるため、クラス キャスト例外が発生します。私の理解では、アプリケーション A を強制終了して再起動すると、クラスローダーを介して GenericActivity のコピーが再度読み込まれるはずです。アプリケーション B の GenericActivity を使用しようとしているのはなぜですか?