<meta http-equiv="content-type" content="text/html; charset=utf-8">
다음과 같은 시스템을 개발중입니다.
두개의 apk로 구성되며, Main.apk(ActiivtyGroup)에서 sub.apk(CustumAct)를 호출하여 사용함.
Main.apk : ActivityGroup + User Library(Custom_Activity)
sub.apk : CustumAct(Custom_Activity을 상속) + User Library(Custom_Activity)
문제는 AcitivityGroup에서 LocalActivityManager의 getActivity()를 이용하여, CustumAct를 받아 CustumAct의 내부함수(func1)을
호출하여 할때 ClassCastException이 발생합니다.
Activity act = am.getActivity("CustumAct");
if(act != null){
Custom_Activity ca = (Custom_Activity) act; ------> ClassCastException이 발생
ca.func1();
}
Activity_A의 상속구조를 자세히 설명하면
* User Library (|-----------> : 상속을 의미)
Activity
|----> Custom_Activity(Activity를 상속받아 Custom_Activity Class를 구현)
* sub.apk
Custom_Activity
|----------------> CustumAct (Custum Activity Class를 상속받아 구현함)
(내부함수 fuct1이 구현되어 있음)
저의 분석 결과로는 Main.apk에서 Casting을 할때 User Library에 선언되어 있지 않은
CustumAct를 알수 없어서 ClassCassException이 발생하는 것으로 판단됩니다.
제가 잘못 이해 한 것인가요? 아니라면
이런경우에 강제로 캐스팅하는 방법을 아시는분 도와주세요. ㅠ.ㅠ
넵 맞습니다. startActivity를 한 Activity(getActivity())를 얻어오는 것이구요,
getActivity()의 리턴값은 Activity이지만, 여기서 실제 속성은 Activity를
상속받은 Custom_Activity의 자식(CustumAct)입니다.
그래서 실제 객체로 사용하기 위해 getActivity의 리턴값을 CustomAct로 다운캐스팅하는데,
그게 안되네요.(ClassCastException)
추정하기로는 라이브러리에 CustomAct는 클래스가 선언되어 있지 않아서 그런거 같은데
해결책 및 원인을 정확히 모르겠네요. ㅠ.ㅠ




LocalActivityManager 객체는 아마두..
LocalActivityManager를 이용해서 startActivity를 한 Activity중 getActivity로 추출이 가능할꺼 입니다..
그러므로 한번 호출을 해야 될것으로 예상됩니다용. 물론 ComponentName을 이용해서 호출해야될것입니당