在android中共享进程时出现ClassCastException

时间:2014-09-09 13:24:20

标签: java android classloader dexclassloader

我创建了2个共享相同进程和用户ID的Android应用程序(应用程序A和应用程序B)。我在两个应用程序中都定义了一个Generic Activity。 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. 在我的应用程序A中,我有一个片段,其代码如下

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

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

0 个答案:

没有答案