1

我创建了 2 个共享相同进程和用户 ID 的 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。我知道,由于两个应用程序的类加载器不同,当启动两个应用程序时,每个类加载器都会有 2 个 GenericActivity 类的副本依次与每个应用程序相关联。到目前为止,一切都很好。

现在我将应用程序都设置为后台,并强行杀死应用程序 A。现在我重新启动应用程序 A。在我的应用程序 AI 中有一个片段,其代码如下

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mActivity = (GenericActivity) getActivity();
}

现在问题来了。我在这里得到一个类转换异常。调试后我发现它正在尝试将其转换为应用程序 B 的 GenericActivity,并且由于它是由不同的类加载器加载的不同类,因此它给出了类转换异常。我的理解是,当我强行杀死应用程序 A 并重新启动它时,它应该再次通过其类加载器加载其 GenericActivity 副本。为什么要尝试使用应用程序 B 的 GenericActivity?

4

0 回答 0