1

同じプロセスとユーザー 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 を使用しようとしているのはなぜですか?

4

0 に答える 0